How to get runtime type of this?
Zhouxuan
pycerl at qq.com
Fri Oct 4 01:42:56 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.
Unfortunately it doesn't work if C inherits from B.
More information about the Digitalmars-d-learn
mailing list