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

Reply via email to