我有以下继承层次结构
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对象。 据我所知2种方式
dynamic_cast
对象并测试所有派生类是否失败
对于所有dynamic_casts
并且只传递B
,我们确定。{
对象的类型为B
再添加一个将返回enumeration
类型的接口方法
值并标识B
对象。
是否还有其他方法可以识别B
类?
答案 0 :(得分:6)
您可以使用typeid运算符。例如
if (typeid(*pA) == typeid(B)) {
/* ... ptr points to a B ... */
}
当pA
正是B 时,这项工作仅
答案 1 :(得分:0)
我认为这是唯一的选择。
我强烈建议不要使用enum
来识别对象类型。它很快就会导致违反Open/Closed Principle。
使用dynamic_cast
要好得多,但是要仔细研究这个问题以确保它是绝对必要的 - 你无法完成你想要使用的virtual
是值得的。 1}}无论你如何尝试它都会发挥作用。