如果我拥有一个C++基类,但不拥有甚至不知道派生类,我能判断给定对象是否是派生类的实例吗?



我不能使用dynamic_cast,因为我不知道派生类的名称。类似于std::is_base_of.

你的问题基本上是如何检查你所拥有的对象的动态类型(通过指针或引用Base)是否实际上是Base。这是typeid的工作:

struct Base { /* ... */ };
bool is_actually_base(Base& b) { return typeid(b) == typeid(Base); }

如果此测试返回false,则该对象必须是派生类类型(或者您在某处搞砸了,程序有未定义行为)。

注意,这仅在Base包含至少一个虚函数(可能是继承的)时才有效。如果不是这样,那么就没有办法检查了。

最新更新