digitalmars.D.learn - How can I make typeof(this) return the type of a calling derrived
- Lester (15/15) Jun 16 2017 If I have something like the following:
- Milan Suk (16/31) Jun 16 2017 What about something like this?
- Adam D. Ruppe (13/16) Jun 16 2017 try one of these:
- Lester (3/3) Jun 16 2017 Thanks for the responses guys :)
If I have something like the following:
class A {
void foo(){ writeln(typeof(this)); }
...
}
class B : A {
...
}
And I want the results:
A a = new A;
B b = new B;
a.foo(); // prints "A"
b.foo(); // prints "B"
How would I go about doing that? At the moment b.foo() is
printing "A".
Jun 16 2017
On Friday, 16 June 2017 at 13:46:14 UTC, Lester wrote:
If I have something like the following:
class A {
void foo(){ writeln(typeof(this)); }
...
}
class B : A {
...
}
And I want the results:
A a = new A;
B b = new B;
a.foo(); // prints "A"
b.foo(); // prints "B"
How would I go about doing that? At the moment b.foo() is
printing "A".
What about something like this?
class A {}
class B : A {}
void foo(T)(T object) {
import std.stdio : writeln;
writeln(object.classinfo.toString); // you can use whatever
property you want...
}
void main()
{
A a = new A;
B b = new B;
a.foo(); // prints "test.A"
b.foo(); // prints "test.B"
}
Jun 16 2017
On Friday, 16 June 2017 at 13:46:14 UTC, Lester wrote:
If I have something like the following:
class A {
void foo(){ writeln(typeof(this)); }
try one of these:
http://dlang.org/spec/template.html#TemplateThisParameter
Though note that the this in there is still the static type at
the usage point. So:
B b = new B;
b.foo; // B, because it is called through a B
but
A b = new B;
b.foo; // A, because it is called through the A interface
You can also do runtime stuff with typeid/classinfo (they return
the same thing) or simply override the function in the child
class (often preferred). Depends on exactly what you need it for.
Jun 16 2017
Thanks for the responses guys :) I ended up using a foo(this T) and it works! Thanks again for your help.
Jun 16 2017









Milan Suk <Milansuk email.cz> 