- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些非常复杂的虚拟对象层次结构,将 3D 引擎中的所有元素表示为抽象类(接口(interface))。
例如,我有 Renderable
,父级是 Sizeable
(使用 getSize()
方法)。 Sizeable
继承自 Positionable
(with getPosition()
) 等
该结构很好且符合逻辑(例如,3D 模型是 Renderable
,用于蒙皮的骨架骨骼是 Sizeable
,相机只是 Positionable
).
还有一个“ super 级”,Engine3D
。
我的目标是:
我必须为那个“图形事物”(模块)编写“实现”。它将是 DirectX 的“实现”。 目标:使用我的“实现”的程序员可以快速简单地切换到其他实现(他使用的实现对他来说几乎是透明的)。
我想保持这种状态:
//choosing module "implementation" ("implementation" mentioned here only)
Engine3D * engine = new MyEngine3D();
Renderable * model = engine->createModel(...);
//line above will return MyRenderable class in fact,
//but user (programmer) will treat it as Renderable
为什么我要创建“自己的”版本的 Renderable
和所有其他版本?因为它们将共享一些特定于“实现”的数据(DirectX 结构的指针等)。
我的问题是:
但那样的话,我会创建一个“镜像”——原始模块对象层次结构的拷贝,每个类名前面都有 My
。此外,MyRenderable
必须同时继承 Renderable
(以覆盖 render()
)和 MySizeable
(以获取DirectX 矩阵等)。
这涉及虚拟继承,确实使结构复杂化。
我主要讲的是避免虚拟多重继承(我猜只是多重继承就可以了)。
最佳答案
你绝对应该避免对象层次结构和渲染实现的强耦合。我的建议是将所有 DirectX 特定代码移动到对象层次结构之外的类,例如 IRenderer
接口(interface)和 DirectXRenderer
实现。将对 IRenderer
的引用或指针添加到所有必须绘制内容的类(Renderable
等)。所有对象类都必须使用您自己的矩阵等实现,以使其独立于实际渲染后端的数据结构。
关于c++ - 对象层次结构的 "Implementation"- "the easiest way"或如何避免虚拟继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23598776/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!