On Friday, 4 October 2013 at 08:23:11 UTC, Jacob Carlborg wrote:
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.

Unfortunately it doesn't work if C inherits from B.

Reply via email to