Thread overview | ||||||
---|---|---|---|---|---|---|
|
February 19, 2017 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? |
February 19, 2017 Re: How to get the type of a derived class in a method of its base class? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Max Samukha | 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 {}
|
February 19, 2017 Re: How to get the type of a derived class in a method of its base class? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Max Samukha | 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 |
February 19, 2017 Re: How to get the type of a derived class in a method of its base class? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Max Samukha | 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;
|
Copyright © 1999-2021 by the D Language Foundation