C++ RTTI: Run-Time Type Information dynamic_cast


Use dynamic_cast<>() as a function, which helps you to cast down through an inheritance hierarchy (main description).

If you must do some non-polymorphic work on some derived classes B and C, but received the base class A, then write like this:

class A { public: virtual ~A(){} };

class B: public A
{ public: void work4B(){} };

class C: public A
{ public: void work4C(){} };

void non_polymorphic_work(A* ap)
  if (B* bp =dynamic_cast<B*>(ap))
  if (C* cp =dynamic_cast<C*>(ap))