digitalmars.D.learn - Access template parameters?
- Gavin Maye (17/17) Feb 16 2016 Say you have
- rsw0x (4/21) Feb 16 2016 If I understand you correctly, you want pattern matching
- =?UTF-8?Q?Ali_=c3=87ehreli?= (22/39) Feb 16 2016 std.traits.TemplateArgsOf:
- Gavin Maye (2/23) Feb 16 2016 Thanks Ali!
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() { ... }
}
Feb 16 2016
On Tuesday, 16 February 2016 at 18:34:40 UTC, 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() { ... }
}
If I understand you correctly, you want pattern matching
i.e,
http://dpaste.dzfl.pl/d8de0a004f59
Feb 16 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
Feb 16 2016
On Tuesday, 16 February 2016 at 19:00:19 UTC, Ali Çehreli wrote: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.) AliThanks Ali!
Feb 16 2016









rsw0x <anonymous anonymous.com> 