【发布时间】:2010-02-06 20:54:15
【问题描述】:
我有一个零件列表,其中一些需要一个指向引擎的指针,我们称它们为 EngineParts。我想要的是使用 RTTI 找到这些 EngineParts,然后给他们引擎。
问题是如何设计EnginePart。我这里有两种选择,如下所述,我不知道该选择哪一种。 选项 1 更快,因为它没有虚函数。 如果我想 Clone() 对象,选项 2 更容易,因为没有数据它不需要 Clone() 函数。
有什么想法吗?也许还有第三种选择?
选项 1:
class Part;
class EnginePart : public Part {
protected: Engine *engine
public: void SetEngine(Engine *e) {engine = e}
};
class Clutch : public EnginePart {
// code that uses this->engine
}
选项 2:
class Part;
class EnginePart : public Part {
public: virtual void SetEngine(Engine *e)=0;
};
class Clutch : public EnginePart {
private: Engine *engine;
public: void SetEngine(Engine *e) { engine = e; }
// code that uses this->engine
}
(注意,实际情况有点牵强,我不能使用像为EngineParts单独创建一个列表这样简单的解决方案)
谢谢
【问题讨论】:
-
也许我应该详细说明一下。它实际上是从磁盘加载的图和 n 叉树的混合体,并且部件是由加载器使用抽象工厂创建的。前 n 部分需要一些全局属性(我使用 Engine 作为示例属性),这些属性不包含在图形本身中。所以这就是为什么我不能在构造函数中提供它,我必须在之后“注入”它。
标签: c++ dependencies setter base-class