如何检查对象是否是基类类型
how to check if the object is base class type
我有以下继承层次结构
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对象。据我所知,两种方式
dynamic_cast
对象并测试所有派生类(如果失败)对于所有dynamic_casts
,仅通过B
通过对象是类型B
添加另一个接口方法,该方法将返回类型
enumeration
值并标识B
对象。
还有其他方法可以识别B
类?
您可以使用TypeID操作员。例如
if (typeid(*pA) == typeid(B)) {
/* ... ptr points to a B ... */
}
这项工作仅当pA
完全b
typeid-文档
我认为这些是唯一的选择。
我会强烈劝阻enum
S识别对象类型的使用。它很快导致违反开放/关闭原则。
使用dynamic_cast
要好得多,但是值得一提的是要确保它绝对必不可少的问题 - 您无法完成使用virtual
功能的功能,无论您如何尝试它。<<<<<<<<<<<<
相关文章:
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 传递给放置 new 的指针是否是指向其对象表示形式的非 UB 指针?
- 在另一个对象 B 中创建对象 A 时,对象 A 是否是对象 B 的本地对象,对象 A 是否会存在于对象 B 的实例化之外?
- Python C API:如何检查对象是否是类型的实例
- C++ - 在类中包含不是类对象属性的变量是否是一种不好的做法
- 检查传递给成员函数的参数是否是对象本身
- 如何检查模板参数是否是具有给定签名的可调用对象
- 找出std :: type_info对象是否是C 中另一个std :: type_info对象的子类型
- QTimer对象是否在单独的线程中运行?它的机制是什么
- 检查对象是否是具有模板的类的实例
- 如何检查对象是否是基类类型
- C++是否有现有的方法来检查对象是否是派生类型对象
- C++检查对象是否是给定超类的后代
- 如何从指向GDB基类的指针确定对象是否是某个派生c++类的实例
- 最有效的检查对象是否是字符串的方法
- 如何检查一个对象是否是Nan 2中的构造函数的实例?
- 在C++中,如何测试对象是否是父类构造函数中子类的实例?
- 有什么技巧可以检测对象是否是在执行另一个析构函数时创建的
- cocoa touch -- 测试对象是否是 objective-C 对象
- 是否有好的方法来确定一个对象是否是另一个对象的克隆