我不能使用dynamic_cast,因为我不知道派生类的名称。类似于std::is_base_of.
你的问题基本上是如何检查你所拥有的对象的动态类型(通过指针或引用Base
)是否实际上是Base
。这是typeid
的工作:
struct Base { /* ... */ };
bool is_actually_base(Base& b) { return typeid(b) == typeid(Base); }
如果此测试返回false,则该对象必须是派生类类型(或者您在某处搞砸了,程序有未定义行为)。
注意,这仅在Base
包含至少一个虚函数(可能是继承的)时才有效。如果不是这样,那么就没有办法检查了。