У меня есть список деталей, и некоторые из них нуждаются в указателе на движок, позволяет называть их EngineParts. Я хочу найти эти EngineParts с помощью RTTI, а затем дать им движок.поставка зависимости через базовый класс
Проблема заключается в том, как создать конструкцию EnginePart. У меня есть два варианта, описанные ниже, и я не знаю, какой из них выбрать. Вариант 1 быстрее, потому что он не имеет виртуальной функции. Вариант 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
}
(Обратите внимание, что текущая ситуация немного сложнее, я не могу использовать простое решение, как создание отдельный список для блоков двигателей)
Thanks
Возможно, я должен немного уточнить. Это на самом деле гибрид графика и n-арного дерева, загружаемого с диска, а части создаются загрузчиком с использованием абстрактной фабрики. Верхним n частям нужны некоторые глобальные свойства (я использовал Engine как свойство примера), которые не содержатся в самом графике. Вот почему я не могу предоставить его в конструкторе, я должен «ввести» его потом. – Eric