Données virtuelles - hiérarchies de classes parallèles
Bonjour,
Ceci est probablement une question bateau, mais je sêche...
J'ai deux hiérarchies de classes parallèles, l'une de conteneurs, l'autres d'élements de ces conteneurs, quelque chose comme
Code:
1 2 3 4 5 6 7 8
|
class TConteneur {
vector<TElement*> Elements;
};
class TElement {
TConteneur *Parent;
}; |
(NB je mets des pointeurs, mais ca pourrait être n'importe quoi...)
De cette façon un conteneur connait ses éléments, un élément son conteneur, tout va bien.
Maintenant, je veux spécialiser conteneurs et élements, en les associant 2 à 2...
Par exemple
Code:
1 2 3 4 5 6 7 8
|
class TConteneurSpecial : public TConteneur {
...
};
class TElementSpecial : public TElement {
...
}; |
Mon problème est le suivant : je voudrais que pour un TElementSpecial, Parent pointe bien vers un TConteneurSpecial, et pas vers un TConteneur normal...
Je vois à ce stade trois solutions :
1- mettre des casts partout... c'est pas trop classe, mais ca va marcher
2- cacher ce cast dans une méthode GetParent(), surcharchée dans TConteneurSpecial :
Code:
1 2 3
|
TConteneur *TElement::GetParent() {return Parent;}
TConteneurSpecial *TElementSpecial::GetParent() {return (TConteneurSpecial*)Parent;} |
3- cacher le cast dans une donnée membre
Code:
1 2 3 4
|
class TElementSpecial : public TElement {
TConteneurSpecial *ParentSpecial;
}; |
Je précise que Parent est un membre privé, que je ne vais pas avoir d'appels hors des fonctions de la classe TConteneur.
Aucune de ces trois méthode ne me gêne particulièrement, je pense qu'elles marchent toutes (je vais vérifier la seconde), mais aucune ne me semble non plus très élégante...
Comment feriez vous?
Merci d'avance
Francois