Use dynamic_cast to replace typeid : dynamic_cast « Pointer « C++ Tutorial






#include <iostream>
#include <typeinfo>
using namespace std;

class Base {
public:
  virtual void f() {}
};

class Derived : public Base {
public:
  void derivedOnly() {
    cout << "Is a Derived Object.\n";
  }
};

int main()
{
  Base *bp, b_ob;
  Derived *dp, d_ob;

  // use typeid
  bp = &b_ob;
  if(typeid(*bp) == typeid(Derived)) {
    dp = (Derived *) bp;
    dp->derivedOnly();
  }
  else
    cout << "Cast from Base to Derived failed.\n";

  return 0;
}
Cast from Base to Derived failed.








11.6.dynamic_cast
11.6.1.Dynamic cast
11.6.2.Use dynamic_cast to replace typeid
11.6.3.dynamic_cast: Cast from Base * to Derived * (wrong)
11.6.4.dynamic_cast: Cast from Base * to Base *
11.6.5.dynamic_cast: Cast from Derived * to Derived *
11.6.6.dynamic_cast: Cast from Derived * to Base *