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