Problème de conception : Héritage et template
Bonjour,
Je suis actuellement géné par un problème d'héritage.
J'ai une classe template "Hierarchy" que je voudrais faire hériter à certains objets. Cela permettrai à un objet qui en hérite d'avoir la possibilité d'ajout de fils.
Je vais essayer d'illustrer un peu mes propos :
J'ai une classe Hierarchy comme suis.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| template <typename T>
class Hierarchy
{
public:
Hierarchy ();
~Hierarchy(){};
void setParent(T * parent){ ... }; // set le pere
T * parent(){ return _parent;}; // retourne le pere
void addChild(T * child){ ...}; // ajoute un fils
std::list<T*> & children() {...}; // retourne la liste de fils
protected:
std::list <T*> _children;
T * _parent;
}; |
Et voudrais qu'un objet, par exemple "Item", qui en hérite puisse avoir une liste de fils et la possibilité d'avoir un père.
Le tout en faisant un simple héritage, sans surcharger ou réimplémenter aucune fonction, du style :
Code:
1 2 3 4 5 6 7
| class Item : public Hierarchy
{
public:
Item () : Hierarchy();
~Item(){};
}; |
En pratique ça donnerai :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Item * pere = new Item();
Item * fils1 = new Item();
Item * fils2 = new Item();
pere->addChild(fils1);
pere->addChild(fils2);
for (int i = 0; pere->children().size; i++)
{
Item * currentChild = pere->children().at(i); //Sans devoir faire de cast
} |
Avec la méthode que j'ai fait je suis obligé de caster un objet de type T en un objet Item avant de m'en servir, ou encore réimplémenter les fonctions dans la classe Item. Je voudrais éviter cette étape.
Merci à ceux qui pourront m'éclairer sur la façon dont il faut faire.