C++ – How to check if an object’s type is a particular subclass in C++


I was thinking along the lines of using typeid() but I don't know how to ask if that type is a subclass of another class (which, by the way, is abstract)

Best Solution


class Base
  public: virtual ~Base() {}

class D1: public Base {};

class D2: public Base {};

int main(int argc,char* argv[]);
  D1   d1;
  D2   d2;

  Base*  x = (argc > 2)?&d1:&d2;

  if (dynamic_cast<D2*>(x) == nullptr)
    std::cout << "NOT A D2" << std::endl;
  if (dynamic_cast<D1*>(x) == nullptr)
    std::cout << "NOT A D1" << std::endl;