www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Extracting Params of Templated Type

reply Nick Sabalausky <SeeWebsiteToContactMe semitwist.com> writes:
If you have a templated type, is there a way to get the compile-time 
parameters it was instantiated with?

Ie:

----------------------
struct Foo(T) {}

alias MyFoo = Foo!int;
----------------------

Is there a way to inspect MyFoo to get its T type (in this case, 'int')? 
*Without* actually making any changes to Foo to explicitly support this?
Apr 03 2014
parent reply "Meta" <jared771 gmail.com> writes:
On Friday, 4 April 2014 at 04:44:56 UTC, Nick Sabalausky wrote:
 If you have a templated type, is there a way to get the 
 compile-time parameters it was instantiated with?

 Ie:

 ----------------------
 struct Foo(T) {}

 alias MyFoo = Foo!int;
 ----------------------

 Is there a way to inspect MyFoo to get its T type (in this 
 case, 'int')? *Without* actually making any changes to Foo to 
 explicitly support this?
alias TemplateArgs(T: Foo!U, U) = U; void main() { assert(is(TemplateArgs!MyFoo == int)); }
Apr 03 2014
next sibling parent Nick Sabalausky <SeeWebsiteToContactMe semitwist.com> writes:
On 4/4/2014 1:02 AM, Meta wrote:
 alias TemplateArgs(T: Foo!U, U) = U;

 void main()
 {
      assert(is(TemplateArgs!MyFoo == int));
 }
Ahh thanks.
Apr 03 2014
prev sibling parent reply Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
On 4/4/14, Meta <jared771 gmail.com> wrote:
 alias TemplateArgs(T: Foo!U, U) = U;
It's also in std.traits, TemplateArgsOf, which is more complete.
Apr 04 2014
parent "Meta" <jared771 gmail.com> writes:
On Friday, 4 April 2014 at 07:23:51 UTC, Andrej Mitrovic wrote:
 On 4/4/14, Meta <jared771 gmail.com> wrote:
 alias TemplateArgs(T: Foo!U, U) = U;
It's also in std.traits, TemplateArgsOf, which is more complete.
I thought I remembered that being in std.traits, but I couldn't find it after quickly skimming. I must've glanced over it.
Apr 04 2014