Thread overview | ||||||
---|---|---|---|---|---|---|
|
February 18, 2011 Finding out if T is a specialization of another template | ||||
---|---|---|---|---|
| ||||
I was given this code, to check if Y is a specialization of Bar. How does it work? class Bar(T) { } 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. } } |
February 18, 2011 Re: Finding out if T is a specialization of another template | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Eskapp | On Fri, 18 Feb 2011 17:16:02 +0000, Sean Eskapp wrote: > I was given this code, to check if Y is a specialization of Bar. How does it work? > > class Bar(T) > { > } > > 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. > } > } I'm not sure what you mean by "how does it work". If it's the is() expression you're wondering about, it's documented here: http://www.digitalmars.com/d/2.0/expression.html#IsExpression -Lars |
February 18, 2011 Re: Finding out if T is a specialization of another template | ||||
---|---|---|---|---|
| ||||
Posted in reply to Lars T. Kyllingstad | == Quote from Lars T. Kyllingstad (public@kyllingen.NOSPAMnet)'s article
> On Fri, 18 Feb 2011 17:16:02 +0000, Sean Eskapp wrote:
> > I was given this code, to check if Y is a specialization of Bar. How does it work?
> >
> > class Bar(T)
> > {
> > }
> >
> > 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.
> > }
> > }
> I'm not sure what you mean by "how does it work". If it's the is() expression you're wondering about, it's documented here: http://www.digitalmars.com/d/2.0/expression.html#IsExpression -Lars
Ah, yes. I'd checked the is documentation, but whenever I tried using that is expression outside of an if statement, it complained about my usage, so I assumed it had something to do with if statements.
|
February 18, 2011 Re: Finding out if T is a specialization of another template | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sean Eskapp | On Fri, 18 Feb 2011 20:37:38 +0000, Sean Eskapp wrote:
> == Quote from Lars T. Kyllingstad (public@kyllingen.NOSPAMnet)'s article
>> On Fri, 18 Feb 2011 17:16:02 +0000, Sean Eskapp wrote:
>> > I was given this code, to check if Y is a specialization of Bar. How does it work?
>> >
>> > class Bar(T)
>> > {
>> > }
>> >
>> > 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.
>> > }
>> > }
>> I'm not sure what you mean by "how does it work". If it's the is() expression you're wondering about, it's documented here: http://www.digitalmars.com/d/2.0/expression.html#IsExpression -Lars
>
> Ah, yes. I'd checked the is documentation, but whenever I tried using that is expression outside of an if statement, it complained about my usage, so I assumed it had something to do with if statements.
Yeah, is() has a few extra features when it's combined with 'static if'. :)
-Lars
|
Copyright © 1999-2021 by the D Language Foundation