www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Getting the template name of a template instantiation

reply =?UTF-8?B?Tm9yZGzDtnc=?= <per.nordlow gmail.com> writes:
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?
Jun 27 2016
next sibling parent reply Lodovico Giaretta <lodovico giaretart.net> writes:
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.
Jun 27 2016
parent =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
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
Jun 27 2016
prev sibling parent reply John <johnch_atms hotmail.com> writes:
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));
Jun 27 2016
parent reply John <johnch_atms hotmail.com> writes:
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));
Jun 27 2016
parent =?UTF-8?B?Tm9yZGzDtnc=?= <per.nordlow gmail.com> writes:
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.
Jun 27 2016