在c++中,有没有一种方法可以告诉我们指针实际指向的是什么类型?

Is there a way to tell what type a pointer is actually pointing to in C++

本文关键字:指针 我们 类型 是什么 有没有 c++ 方法 一种      更新时间:2023-10-16

在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;
}

失败是因为您没有在Foo中声明任何虚函数。例如,将其更改为具有虚析构函数,您将获得期望的结果。

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

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

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

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

相关文章: