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
(NB je mets des pointeurs, mais ca pourrait être n'importe quoi...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class TConteneur { vector<TElement*> Elements; }; class TElement { TConteneur *Parent; };
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
Mon problème est le suivant : je voudrais que pour un TElementSpecial, Parent pointe bien vers un TConteneurSpecial, et pas vers un TConteneur normal...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class TConteneurSpecial : public TConteneur { ... }; class TElementSpecial : public TElement { ... };
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 :
3- cacher le cast dans une donnée membre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 TConteneur *TElement::GetParent() {return Parent;} TConteneurSpecial *TElementSpecial::GetParent() {return (TConteneurSpecial*)Parent;}
Je précise que Parent est un membre privé, que je ne vais pas avoir d'appels hors des fonctions de la classe TConteneur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class TElementSpecial : public TElement { TConteneurSpecial *ParentSpecial; };
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
Partager