パーツのリストがあり、そのうちのいくつかはエンジンへのポインターが必要です。それらをEnginePartsと呼びましょう。私が欲しいのは、RTTIを使用してこれらのEnginePartsを見つけて、それらにエンジンを与えることです。
問題は、EnginePartをどのように設計するかです。ここでは、以下に説明する2つのオプションがありますが、どちらを選択すればよいかわかりません。オプション1は仮想機能がないため、より高速です。オブジェクトがなければClone()関数を必要としないため、オブジェクトをClone()する場合は、オプション2の方が簡単です。
何かご意見は?多分3番目のオプションがありますか?
オプション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用に別のリストを作成するような単純なソリューションを使用することはできません)
ありがとう