J'ai une liste des parties et certains d'entre eux ont besoin d'un pointeur vers un moteur, permet de les appeler EngineParts. Ce que je veux, c'est trouver ces EngineParts en utilisant RTTI et ensuite leur donner le moteur.fournissant la dépendance par classe de base
Le problème est de savoir comment concevoir le EnginePart. J'ai deux options ici, décrites ci-dessous, et je ne sais pas lequel choisir. L'option 1 est plus rapide car elle n'a pas de fonction virtuelle. L'option 2 est plus facile si je veux clone() l'objet car sans données, il n'a pas besoin d'une fonction clone().
Des pensées? Peut-être qu'il y a une troisième option?
Option 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
}
Option 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
}
(Notez que la situation réelle est un peu plus impliqué, je ne peux pas utiliser une solution simple comme la création une liste séparée pour EngineParts)
Merci
Peut-être que je devrais dire un peu plus. Il s'agit en fait d'un hybride d'un graphe et d'un arbre n-aire chargé à partir du disque et les pièces sont créées par le chargeur à l'aide d'une fabrique abstraite. Les parties supérieures n ont besoin de propriétés globales (j'ai utilisé Moteur comme propriété d'exemple) qui ne sont pas contenues dans le graphique lui-même. C'est pourquoi je ne peux pas le fournir dans le constructeur, je dois l'injecter par la suite. – Eric