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.