У меня есть список деталей, и некоторые из них нуждаются в указателе на Engine, давайте назовем их EngineParts. Я хочу найти эти EngineParts, используя RTTI, а затем дать им Engine.
Проблема в том, как спроектировать EnginePart. У меня есть два варианта, описанных ниже, и я не знаю, какой из них выбрать.
Вариант 1 быстрее, потому что у него нет виртуальной функции.
Вариант 2 проще, если я хочу Clone () объекта, потому что без данных ему не нужна функция 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)
Спасибо