在c++中,有没有一种方法可以告诉我们指针实际指向的是什么类型?
Is there a way to tell what type a pointer is actually pointing to in C++
在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++方法)。
相关文章:
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 为什么我们将 [ ] 与指向数组的指针一起使用?
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- C++我们可以取消引用此指针吗?如果是这样,那么如何,如果不是,那为什么?
- 如果我们不创建一个新节点并使用指针插入数据并建立链接(在链表中)怎么办?
- 我们如何在指针中存储对对象的引用?
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 我们可以在不使用head指针的情况下通过使用head的简单变量而不是head的指针来实现链表吗
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么要使用引用来获取 *char?当我们使用指针时,不使用引用不是更好吗?
- 为什么我们使用 glfwCreateWindow 的指针? - OpenGL
- 为什么我们在这里将 0 添加到双空指针上?
- 为什么我们需要传递常量共享指针作为引用?
- 为什么即使我们将指针分配给 NULL,指针的指向对象的大小也不为零
- 我们可以来回移动流的指针以输出到文件吗?
- 我们如何在 C 中制作函数指针的深层副本
- 如何将函数指针(我们不知道参数的函数)声明为类成员?