在C++中是否可以创建一个指向类的指针?

9

如何创建指向一个类的指针。我认为,类存在于内存中的某个位置,因此,是否有可能获得指向它的指针?
我不是指对象的指针,而是指指向类本身的指针(就像函数指针一样)。


2
“指向类的指针”或“类也是对象”是其他一些语言中在运行时操纵类型的想法。在C++中,类型操作是通过模板在编译时完成的,例如std::array<int,10>可以将整数制成一个数组。 - MSalters
4
对我来说,这听起来像是一个[X/Y问题](https://meta.stackexchange.com/a/66378)。 - perivesta
@drescherjm:这可能是有道理的。考虑一下反射,或者简单的元编程。std::is_same只是从那些OP期望的变量中变成了== - Jarod42
类是抽象的编译器原理图,仅在编译时使用,以便它知道如何构造新实例,并如何操作实例(实例实际上存储在内存中)。这些知识被“印刻”到生成的机器代码中,该代码实现了与实例相关的方法(例如构造函数/析构函数和其他类方法)。编译后,这种抽象知识不再需要,并被丢弃,只有实现所有这些行为的机器代码存储在可执行文件中。即关于类在运行时存在于 RAM 中的假设是错误的。它不在那里。 - Ped7g
2
这是一个在Java、C#和其他具有反射功能的语言中非常合理(并且有解决方案)的问题。但这是C++,在编译期间类不存在,因此答案只能是:不行。 - Frodyne
显示剩余2条评论
2个回答

13

我认为,类在内存中存在。

类在运行时并不存在,因此您不能获取指向类的指针。

只有对象在运行时存在。


4
为了防止其他编程语言的访问者产生混淆:是的,一些其他语言包括反射,在运行时允许检查类型,并且“获取类的指针”(例如:https://learn.microsoft.com/en-us/dotnet/api/system.type?view=netframework-4.8)。然而,C++不包括反射,上述内容是C++语言的正确答案。 - Frodyne

4

这是不可能的。C++有三种指针类型:

  1. 指向对象的指针
  2. 指向函数的指针
  3. 指向类成员的指针。

类不属于上述任何一种类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接