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