How to get runtime type of this?
Jacob Carlborg
doob at me.com
Fri Oct 4 01:23:10 PDT 2013
On 2013-10-04 10:03, Zhouxuan wrote:
> import std.stdio;
>
> class A
> {
> static int id = 0;
> this()
> {
> writeln("typeid=", typeid(this));
> writeln("id=",typeof(this).id); //how to get runtime type of
> this ??
> }
> }
>
> class B : A
> {
> static int id = 1;
> }
>
> class C : A
> {
> static int id = 2;
> }
>
> void main()
> {
> A a = new B;
> A b = new C;
> }
>
> typeof(this) can get compile time type while typeid yield a runtime
> TypeInfo instance, but how to get runtime type? I want the output to be
> "id=1" and "id=2" respectively.
You can do this:
class A
{
static int id = 0;
this(this T)()
{
writeln("typeid=", typeid(T));
writeln("id=",T.id); //how to get runtime type of this ??
}
}
class B : A
{
static int id = 1;
this () { super(); }
}
class C : A
{
static int id = 2;
this () { super(); }
}
void main()
{
A a = new B;
A b = new C;
}
Put I'm guess you want to avoid the constructor in the subclasses. I
think there's a bug report about this.
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list