On Wed, 08 Feb 2012 14:41:51 -0500, Jonathan M Davis <[email protected]> wrote:

On Wednesday, February 08, 2012 20:21:45 Johannes Pfau wrote:
Am Wed, 8 Feb 2012 11:20:39 -0800

schrieb "H. S. Teoh" <[email protected]>:
> What's the correct syntax for checking the runtime type of a derived
>
> object given its base class pointer? I tried:
> Base f() { return new Derived(); }
> Base b = f();
> assert(is(typeof(b)==Derived));
>
> but it throws an error. Apparently typeof(b)==Base; so typeof returns
> only compile-time information? How do I get at the runtime type?
>
>
> T

I think using casts is the only way:

Base f() { return new Derived(); }
Base b = f();
auto c = cast(Derived)b;
assert(c !is null);

Casting is definitely the way that you're supposed to do it. If the cast
results in null, then the class is _not_ of the type that you cast to. e.g.

if(auto d = cast(Derived) b)
 //do stuff with d

It depends on the usage. If you want to see what the most derived type is, using typeid is best (for those old-schoolers, this used to be .classinfo).

If you want to *verify* that the given type is derived from some other type, using cast is best.

-Steve

Reply via email to