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