Re: How to get the type of a derived class in a method of its base class?
On Sunday, 19 February 2017 at 07:52:13 UTC, Max Samukha wrote: class A { this(T = this)() { static assert(is(T == B)); } } class B { } auto b = new B; Here, T becomes A, which may be reasonable but is completely useless. Is there a way to obtain the type of the class (or class instance reference) the method is called on? Not at compile time: class A { this() { assert(typeid(this) == typeid(B)); } } class B : A { } auto b = new B;
Re: How to get the type of a derived class in a method of its base class?
On Sunday, 19 February 2017 at 07:52:13 UTC, Max Samukha wrote: class A { this(T = this)() { static assert(is(T == B)); } } class B { } auto b = new B; Here, T becomes A, which may be reasonable but is completely useless. Is there a way to obtain the type of the class (or class instance reference) the method is called on? I believe template this parameters[1] are what you're looking for here. https://dlang.org/spec/template.html#template_this_parameter
Re: How to get the type of a derived class in a method of its base class?
On Sunday, 19 February 2017 at 07:52:13 UTC, Max Samukha wrote: class B { } auto b = new B; Here, T becomes A, which may be reasonable but is completely useless. Is there a way to obtain the type of the class (or class instance reference) the method is called on? is B not supposed to inherit from A? like class B: A {}
How to get the type of a derived class in a method of its base class?
class A { this(T = this)() { static assert(is(T == B)); } } class B { } auto b = new B; Here, T becomes A, which may be reasonable but is completely useless. Is there a way to obtain the type of the class (or class instance reference) the method is called on?