Access template parameters?
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Feb 16 11:00:19 PST 2016
On 02/16/2016 10:34 AM, Gavin Maye wrote:
> Say you have
>
> class Foo(type1,type2)
> {
> ....
> }
>
> And a concrete Foo is passed as a parameter to another template, is
> there a way to get type1 and type2 from Foo so you can use them in the
> new template... For example..
>
> class Bar(FooType)
> {
> FooType.type1 DoSomething() { ... }
> }
>
> or Even something like
>
> class Bar(FooType) : Baz!(FooType.type1)
> {
> FooType.type1 DoSomething() { ... }
> }
>
>
std.traits.TemplateArgsOf:
http://dlang.org/phobos/std_traits.html#TemplateArgsOf
import std.traits;
class Foo(type1,type2)
{}
class Bar(FooType)
{
// pragma(msg, TemplateArgsOf!FooType);
alias ReturnType = TemplateArgsOf!FooType[0];
ReturnType DoSomething() {
return ReturnType.init;
}
}
void main() {
auto b = new Bar!(Foo!(string, double));
}
However, there are other ways of achieving the same thing at least when
returning from a function, e.g.:
auto DoSomething() {}
(Check out typeof(return) which may be useful in that case.)
Ali
More information about the Digitalmars-d-learn
mailing list