Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
June 27, 2016 Getting the template name of a template instantiation | ||||
---|---|---|---|---|
| ||||
If I have a template parameter E = S!int where struct S(T) { S x; } how can I extract the template name part `S` from E`? Something like: static assert(is(templateName!(S!int) == S)); Is this already in Phobos somewhere? |
June 27, 2016 Re: Getting the template name of a template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Monday, 27 June 2016 at 16:40:09 UTC, Nordlöw wrote:
> If I have a template parameter
>
> E = S!int
>
> where
>
> struct S(T) { S x; }
>
> how can I extract the template name part `S` from E`?
>
> Something like:
>
> static assert(is(templateName!(S!int) == S));
>
> Is this already in Phobos somewhere?
If I recall correctly, std.traits contains a TemplateOf trait, that should do exactly what you want.
|
June 27, 2016 Re: Getting the template name of a template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Monday, 27 June 2016 at 16:40:09 UTC, Nordlöw wrote:
> If I have a template parameter
>
> E = S!int
>
> where
>
> struct S(T) { S x; }
>
> how can I extract the template name part `S` from E`?
>
> Something like:
>
> static assert(is(templateName!(S!int) == S));
>
> Is this already in Phobos somewhere?
import std.traits;
__traits(identifier, TemplateOf!(S!int));
|
June 27, 2016 Re: Getting the template name of a template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lodovico Giaretta | On 06/27/2016 09:54 AM, Lodovico Giaretta wrote: > On Monday, 27 June 2016 at 16:40:09 UTC, Nordlöw wrote: >> If I have a template parameter >> >> E = S!int >> >> where >> >> struct S(T) { S x; } >> >> how can I extract the template name part `S` from E`? >> >> Something like: >> >> static assert(is(templateName!(S!int) == S)); >> >> Is this already in Phobos somewhere? > > If I recall correctly, std.traits contains a TemplateOf trait, that > should do exactly what you want. Yes, isIntanceOf: https://dlang.org/phobos/std_traits.html#isInstanceOf Ali |
June 27, 2016 Re: Getting the template name of a template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to John | On Monday, 27 June 2016 at 17:14:23 UTC, John wrote:
> On Monday, 27 June 2016 at 16:40:09 UTC, Nordlöw wrote:
>> If I have a template parameter
>>
>> E = S!int
>>
>> where
>>
>> struct S(T) { S x; }
>>
>> how can I extract the template name part `S` from E`?
>>
>> Something like:
>>
>> static assert(is(templateName!(S!int) == S));
>>
>> Is this already in Phobos somewhere?
>
> import std.traits;
> __traits(identifier, TemplateOf!(S!int));
Scratch that, this is what you want:
import std.traits;
static assert(__traits(isSame, TemplateOf!(S!int), S));
|
June 27, 2016 Re: Getting the template name of a template instantiation | ||||
---|---|---|---|---|
| ||||
Posted in reply to John | On Monday, 27 June 2016 at 17:17:19 UTC, John wrote:
>> import std.traits;
>> __traits(identifier, TemplateOf!(S!int));
>
> Scratch that, this is what you want:
>
> import std.traits;
> static assert(__traits(isSame, TemplateOf!(S!int), S));
I believe this is what
import std.traits : isInstanceOf;
is for.
Thanks! I found both useful.
|
Copyright © 1999-2021 by the D Language Foundation