【问题标题】:Is it possible to create a pointer to a class in C++是否可以在 C++ 中创建指向类的指针
【发布时间】:2020-01-18 08:12:08
【问题描述】:

如何创建指向类的指针。我假设,类存在于 RAM 中的某个地方,那么,是否有可能获得指向它的指针?
我不是指指向对象的指针,我指的是指向类本身的指针(如函数指针)。

【问题讨论】:

  • “指向类的指针”或“类也是对象”是其他一些语言在运行时操作类型的想法。在 C++ 中,类型操作是在编译时通过模板完成的,例如std::array<int.10> 用整数创建一个数组。
  • 对我来说,这听起来像是X/Y Problem.
  • @drescherjm:这可能是有道理的。想想反射,或者只是一些元编程。 std::is_same 只是来自那些 OP 预期变量的 ==
  • 类是编译器的抽象示意图,仅在编译时使用,因此它知道如何构造新实例,以及如何操作实例(实例物理上在内存中)。该知识被“烙印”到生成的机器代码中,该代码实现了与实例一起工作的方法(如构造函数/析构函数和其他类方法)。编译后,不再需要抽象知识并将其丢弃,只有实现所有这些行为的机器代码存储在可执行文件中。 IE。您关于类在运行时处于 ram 中的假设是错误的。它不存在
  • 这是一个在 Java、C# 和其他有反射的语言中非常有意义(并且有解决方案)的问题。但这是 C++,而这里的类在编译过程中不复存在,所以答案很坚定:不。

标签: c++ class pointers


【解决方案1】:

我假设,类存在于 Ram 中的某个地方

类在运行时不存在,因此您不能使用指向类的指针。

只有对象在运行时存在。

【讨论】:

  • 只是为了防止来自其他编程语言的访问者混淆:是的,其他一些语言包括反射,它允许在运行时检查类型,并“获取指向类的指针”(例如:docs.microsoft.com/en-us/dotnet/api/… )。但是C++不包含反射,以上是C++语言的正确答案。
【解决方案2】:

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

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

以上都不是类。

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2015-08-26
    • 2011-04-24
    相关资源
    最近更新 更多