如何检查对象是否是基类类型

how to check if the object is base class type

本文关键字:对象 是否是 基类 类型 检查 何检查      更新时间:2023-10-16

我有以下继承层次结构

class A{
  virtual bool fun() = 0;
};
class B: public A{
...
}
class C: public B{
...
}
class D: public C{
...
}
class E: public B{
...
}

在主程序中,我正在执行

for(auto pA: ObjVector)
{
   if(pA->fun()){
       ...
   }
}

现在我想知道PA是包含B类B对象。据我所知,两种方式

  1. dynamic_cast对象并测试所有派生类(如果失败)对于所有dynamic_casts,仅通过B通过对象是类型B

  2. 添加另一个接口方法,该方法将返回类型enumeration值并标识B对象。

还有其他方法可以识别B类?

您可以使用TypeID操作员。例如

if (typeid(*pA) == typeid(B)) {
    /* ... ptr points to a B ... */
}

这项工作pA完全b

typeid-文档

我认为这些是唯一的选择。

我会强烈劝阻enum S识别对象类型的使用。它很快导致违反开放/关闭原则。

使用dynamic_cast要好得多,但是值得一提的是要确保它绝对必不可少的问题 - 您无法完成使用virtual功能的功能,无论您如何尝试它。<<<<<<<<<<<<