C++检查对象是否是给定超类的后代
C++ check if object is a descendant of a given superclass
我有一个指向对象的指针,我想知道该对象是给定类的类型还是C++中给定类的子类的类型。
使用 dynamic_cast:
class A {
public:
virtual ~A() = default;
};
class B : public A {
};
B * obj = new B();
auto obj2 = dynamic_cast<A*>(obj);
if (obj2 != nullptr) {
std::cout << "B is an A" << std::endl;
}
开头的指针必须具有类型。假设该类型是 T*
.假设"给定类"是G
.我认为(尽管我可能是错的)这是您想知道的对象的完整类型,而不是类型T
和G
之间的关系。
如果T
是至少有一个虚函数的类类型,那么你可以在指针上执行所需的测试,ptr
如下所示:
if (dynamic_cast<G*>(ptr)) {
// then the complete type of your object is either G or a subclass
} else {
// it isn't
}
如果T
不是类类型,或者它没有虚函数,那么你想要做的事情是不可能的。您必须为指针找到更有用的静态类型。
如果你想知道的只是G
是"基础还是相同"T
那么你不需要dynamic_cast
或有一个虚拟函数。你只需要std::is_base_of
.
相关文章:
- 模板转换为超类
- 我的超类中的模板问题与结构定义
- 创建子类的多个实例,其中只有一个超类实例
- 给定一个指向对象的超类指针,如何获取对象的大小?
- 重写另一个方法 [C++] 使用的超类回调函数
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- C++为API中定义的结构创建超类
- 使用派生类C++方法的超类
- 确保指向超类的指针指向c++中某个子类的对象
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 在从给定超类继承的所有类上调用虚函数
- 如何使 Swig 发出C++超类
- 如何根据构造函数参数使用超类类型初始化成员变量?
- C++:从类型索引中获取超类类型索引
- 为什么编译器找不到超类的方法?
- 无法使用子类变量访问超类公共成员
- 如何将项目放入具有模板化超类类型的向量中
- 如何高效/正确地存储等距游戏的不同类(单个超类的所有子类型)的地图?
- C++检查对象是否是给定超类的后代