digitalmars.D.learn - Passing a type as paramter to super
- Marc (6/21) Jan 04 2018 For code generation purposes, I'd like to pass a type name to
- Marc (2/28) Jan 04 2018
- Steven Schveighoffer (8/43) Jan 04 2018 AFAIK, you can't explicitly use template parameters for constructors, it...
- =?UTF-8?Q?Ali_=c3=87ehreli?= (20/45) Jan 04 2018 Checkout the "this template parameter":
For code generation purposes, I'd like to pass a type name to base class. I'm not sure if it's supported, I didn't find anything at documentation for class constructor but it does compile:class A { static { int a, b; } this(T)() { } }then do something like this:class B { this() { super!B; } }but I got the error:found ! when expecting ; following statement
Jan 04 2018
On Thursday, 4 January 2018 at 19:16:03 UTC, Marc wrote:For code generation purposes, I'd like to pass a type name to base class. I'm not sure if it's supported, I didn't find anything at documentation for class constructor but it does compile:sorry I mean define class b as following:class A { static { int a, b; } this(T)() { } }then do something like this:class B { this() { super!B; } }but I got the error:found ! when expecting ; following statementclass B : A { this() { super!B; } }
Jan 04 2018
On 1/4/18 2:19 PM, Marc wrote:On Thursday, 4 January 2018 at 19:16:03 UTC, Marc wrote:AFAIK, you can't explicitly use template parameters for constructors, it has to be IFTI. Ali has the right idea for capturing the type of this. But it only goes one level deep, it doesn't give you the full derived type if there are 2 or more levels. Note, you may want to simply define a separate non-constructor for this purpose, where you have full control. -SteveFor code generation purposes, I'd like to pass a type name to base class. I'm not sure if it's supported, I didn't find anything at documentation for class constructor but it does compile:sorry I mean define class b as following:class A { static { int a, b; } this(T)() { } }then do something like this:class B { this() { super!B; } }but I got the error:found ! when expecting ; following statementclass B : A { this() { super!B; } }
Jan 04 2018
On 01/04/2018 11:16 AM, Marc wrote:For code generation purposes, I'd like to pass a type name to base class. I'm not sure if it's supported, I didn't find anything at documentation for class constructor but it does compile:Checkout the "this template parameter": class A { static { int a, b; } this(this T)() { import std.stdio; writeln(T.stringof); } } class B : A { this() { super(); } } void main() { auto b = new B(); } Aliclass A { static { int a, b; } this(T)() { } }then do something like this:class B { this() { super!B; } }but I got the error:found ! when expecting ; following statement
Jan 04 2018