www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Checking if something is a template specialization?

reply Sean Eskapp <eatingstaples gmail.com> writes:
If I have

class Bar(T)
{
}

void foo(Y)()
{
   ...
}

Is there a way to check inside foo() that Y is in some way an instantiation of
Bar? Is there a way to find WHICH instantiation it is?
Feb 17 2011
parent reply "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
On Fri, 18 Feb 2011 02:02:51 +0000, Sean Eskapp wrote:

 If I have
 
 class Bar(T)
 {
 }
 
 void foo(Y)()
 {
    ...
 }
 
 Is there a way to check inside foo() that Y is in some way an
 instantiation of Bar? Is there a way to find WHICH instantiation it is?

void foo(Y)() { static if (is(Y Z == Bar!Z)) { // Here, Z is now an alias to whichever type Bar is // instantiated with. } else { // Z is invalid here. } }
Feb 18 2011
parent Sean Eskapp <eatingstaples gmail.com> writes:
== Quote from Lars T. Kyllingstad (public kyllingen.NOSPAMnet)'s article
 On Fri, 18 Feb 2011 02:02:51 +0000, Sean Eskapp wrote:
 If I have

 class Bar(T)
 {
 }

 void foo(Y)()
 {
    ...
 }

 Is there a way to check inside foo() that Y is in some way an
 instantiation of Bar? Is there a way to find WHICH instantiation it is?

{ static if (is(Y Z == Bar!Z)) { // Here, Z is now an alias to whichever type Bar is // instantiated with. } else { // Z is invalid here. } }

Perfect, thanks!
Feb 18 2011