我的问题与 C++ 中的 RTTI 有关,我试图检查一个对象是否属于另一个对象的类型层次结构。BelongsTo() 方法检查这一点。我尝试使用 typeid,但它会引发错误,我不确定如何找到在运行时转换为的目标类型。
#include <iostream>
#include <typeinfo>
class X
{
public:
// Checks if the input type belongs to the type heirarchy of input object type
bool BelongsTo(X* p_a)
{
// I'm trying to check if the current (this) type belongs to the same type
// hierarchy as the input type
return dynamic_cast<typeid(*p_a)*>(this) != NULL; // error C2059: syntax error 'typeid'
}
};
class A : public X
{
};
class B : public A
{
};
class C : public A
{
};
int main()
{
X* a = new A();
X* b = new B();
X* c = new C();
bool test1 = b->BelongsTo(a); // should return true
bool test2 = b->BelongsTo(c); // should return false
bool test3 = c->BelongsTo(a); // should return true
}
使方法虚拟并让派生类这样做似乎是个坏主意,因为我在同一类型层次结构中有很多类。或者有人知道做同样事情的任何其他/更好的方法吗?请建议。
更新:b.BelongsTo(a) 应该检测输入对象类型 (a) 是否是类型层次结构中当前对象 (b) 的祖先。