2

在 C++ 中,您可以将指针声明为一种类型,然后将其指向不同的继承类型。有什么方法可以判断您当前指向的是哪个?

#include <typeinfo>
using namespace std;

class Foo
{
};

class Bar : public Foo
{
};

int main()
{
    Bar bar;
    Foo* foo = &bar;
    bool I_WANT_THIS_TO_BE_TRUE = (typeid(*foo) == typeid(Bar));
    return 0;
}
4

2 回答 2

7

这失败了,因为您没有在Foo. 例如,将其更改为具有虚拟析构函数,您将获得预期的结果。

于 2012-12-30T13:33:44.807 回答
2

您正在寻找的是反射或 RTTI(运行时类型信息)的东西。

请参阅此信息以开始主题:C++ 的属性和反射库?

不出所料,维基百科也有关于 RTTI 的文章:http ://en.wikipedia.org/wiki/Run-time_type_information

然后有一些框架为从一些公共基类派生的对象提供反射特性(它提供反射方法,继承给所有子类)。一个例子是Qt 的元对象系统。这些可以提供比普通 C++ RTTI 更多的信息,并提供完整的反射支持(例如通过在编译时未知的名称调用方法,例如调用 C++ 方法的 javascript 代码)。

于 2012-12-30T13:37:09.517 回答