On 06/19/2013 04:10 PM, Stephen Jones wrote:
Hm... would be a nice idiom to implement generically in D. Like a type
switch.
-Steve
That is what I would prefer, but I tried:
writeln(to!(typeof(bars[1]))(bars[1]).val);
to see if I could access the "DERIVED" (thanks) class type but even
though bars[1] is initialized as a new Foos its type is still marked as
Bar. So the question is, how do you find the derived class type when
presented with only the super class?
typeid gives you a TypeInfo class:
http://dlang.org/expression.html#TypeidExpression
http://dlang.org/phobos/object.html#.TypeInfo
import std.stdio;
class Base
{}
class Derived1 : Base
{}
class Derived2 : Base
{}
void foo(Base b)
{
writeln(typeid(b));
}
void main()
{
foo(new Derived1());
foo(new Derived2());
}
Prints:
deneme.Derived1
deneme.Derived2
There is also TypeInfo_Class there which may be useful.
Ali