c++ - 一个类的实例(不是类本身)可以是另一个类的许多实例的父类吗?
问题描述
根本问题
我正在尝试使用 C++ 中的 Vulkan 构建渲染引擎。我正在尝试从引擎结构中删除资产网格、纹理和类似的东西,我将其用于测试目的,并将其转移到它自己的单独类中。我需要访问存储在渲染引擎类中的一些对象,因为每个资产都需要能够将自己添加到顶点向量中,并且例如可以访问相同VkDevice
的对象。
第一次尝试
我尝试的第一个方法是让资产的构造函数将渲染引擎作为其参数之一,然后从资产的渲染引擎获取我需要的所有对象的指针。我仍然认为这种方法可能有效,但我无法在资产类之前声明渲染引擎的类,因为渲染引擎需要它在这种情况下管理的所有资产的向量。我也不能在渲染引擎的类之前声明资产的类,因为这样我就不能将渲染引擎作为资产构造函数的参数。这感觉它应该有一个简单的解决方案,但我找不到一个,所以我去尝试我的第二种方法。
第二次尝试
我尝试的第二种方法是继承。但是,当我尝试使用它时,我意识到我不知道如何让渲染引擎类的一个实例成为资产类的许多实例的父级。每个资产都需要自己的渲染引擎,但我需要每个资产从同一个渲染引擎继承,以便渲染引擎的对象对于所有资产都是相同的,并且避免需要管理渲染引擎的许多实例。
最后的想法
我认为第一个选项可能有一种简单的方法,但我认为从长远来看,第二个选项会更有价值,因为它更易于管理、更清洁、导致更好的组织代码,甚至可以教我更多关于我开始探索的这种伟大语言的信息。我更喜欢涉及第二种方法的解决方案,但我也不知道这是否可能,因为继承似乎不适用于每个实例。最后,我对不涉及这些选项的新想法非常开放。
最后一个问题
是否有一种继承方法允许一个对象的许多实例从 C++ 中另一个对象的一个实例继承?
解决方案
是否有一种继承方法允许一个对象的许多实例从 C++ 中另一个对象的一个实例继承?
不,你在这里混合苹果和橙子。
继承是一种从一个或多个基类构建一个类的方法。它与这些类的实例无关,在 C++ 中,类不是对象。因此,通过从您定义D
的另一个类派生一个类,但您不创建or的任何实例。B
D
B
D
当您创建 的对象(实例)时D
,这些对象都将具有相同的二进制布局,其中包括来自B
和的数据成员D
。也就是说,每个 class 对象都D
将包含 class 的一个基本子对象B
。D
如果没有类的基本子对象B
或具有不同的二进制布局(例如通过引用B
不同的地址) ,则无法创建类对象。
您可以使用引用或(智能)指针在不同对象之间共享数据,例如std::shared_ptr
. 但这与类继承无关。您将不得不使用引用和(智能)指针作为类的数据成员。
推荐阅读
- depth-first-search - 在深度优先遍历中如何使用回溯?
- resize - Fedora 31 VM如何调整分区大小?
- java - 如何初始化 JAX-RS HttpHeaders
- python - pyserial isOpen() 总是返回 True
- python - 在 pandas 中分离时间序列并为每个时间序列提供 ID
- python - 将从文件读取的二进制数据转换为 uint32 数组
- ios - 在哪里可以找到无法在应用程序内部使用的数据的官方列表?
- c - 如何使用 termios.h 配置串行端口以传递原始字节?
- javascript - 如何在 vue 类组件中访问 $bvToast
- swiftui - 嵌套数组中的已发布变量不显示更改