How to get runtime type of this?

Zhouxuan pycerl at qq.com
Fri Oct 4 01:32:12 PDT 2013


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.

This is exactly what I want, thank you very much!
Redundant constructor here is not a problem, however there're so 
many workarounds atm.


More information about the Digitalmars-d-learn mailing list