Thread overview
Extracting Params of Templated Type
Apr 04, 2014
Nick Sabalausky
Apr 04, 2014
Meta
Apr 04, 2014
Nick Sabalausky
Apr 04, 2014
Andrej Mitrovic
Apr 04, 2014
Meta
April 04, 2014
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?
April 04, 2014
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));
}
April 04, 2014
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.


April 04, 2014
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.
April 04, 2014
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.