Re: How to get the type of a derived class in a method of its base class?

2017-02-19 Thread biozic via Digitalmars-d-learn

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?

2017-02-19 Thread Mike Parker via Digitalmars-d-learn

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?

2017-02-19 Thread aberba via Digitalmars-d-learn

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?

2017-02-18 Thread Max Samukha via Digitalmars-d-learn

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?