【发布时间】:2010-04-09 20:55:04
【问题描述】:
我有一个关于我正在努力解决的问题的问题。希望你能忍受我。
假设我有一个 Object 类,它代表物理对象层次结构的基类。后来我从它继承创建了一个Object1D、Object2D和Object3D类。这些派生类中的每一个都有一些特定的方法和属性。例如,3d 对象可能具有下载 3d 模型以供渲染器使用的功能。
所以我有这样的东西:
class Object {};
class Object1D : public Object { Point mPos; };
class Object2D : public Object { ... };
class Object3D : public Object { Model mModel; };
现在我有一个名为 Renderer 的单独类,它只接受一个 Object 作为参数,然后渲染它 :-) 以类似的方式,我想支持不同类型的渲染器。例如,我可以有一个每个对象都可以依赖的默认渲染器,然后为某种对象提供其他特定的渲染器:
class Renderer {}; // Default one
class Renderer3D : public Renderer {};
我的问题来了。渲染器类需要获取一个 Object 作为参数,例如在构造函数中,以便检索渲染对象所需的任何数据。
到目前为止一切顺利。但是 Renderer3D 需要获取 Object3D 参数,以便不仅获取基本属性,还获取 3d 对象的特定属性。
构造函数如下所示:
CRenderer(Object& object);
CRenderer3D(Object3D& object);
现在如何以通用方式指定它?或者更好的是,有没有更好的方法来设计这个?
我知道我可以依赖 RTTI 或类似的工具,但我想尽可能避免这种情况,因为我觉得可能有更好的方法来处理这个问题。
提前致谢!
【问题讨论】:
-
干杯伙计们,非常感谢您的帮助。非常感谢,我在过去的几个小时里一直在重新思考这个问题。请在下面查看我的 cmets 每个答案。
-
您可能想使用与“对象”不同的名称。
标签: design-patterns inheritance polymorphism