[STL] std::list de classe et de ses derivées
Bonjour,
Voila mon souci :
J'ai une classe cBoite, une classe cCube, et d'autres qui derivent toutes de la classe cObjet.
J'ai une classe cConteneur qui derive elle aussi de cObjet.
La classe cConteneur a comme membre une liste des objets qu'elle contient :
Code:
1 2 3 4 5 6 7 8 9 10
| class cConteneur : public cObjet
{
public:
std::list<cObjet*> m_listeObjets;
public:
void afficherObjets();
void trierObjets()
.....
} |
Jusqu'ici tout va bien....
Seulement, certains de mes conteneurs (qui derivent de la classe cConteneur) ne sont prevus pour ne contenir que des cubes (par exemple)
Code:
1 2 3 4
| class cConteneurCube : public cConteneur
{
.....
} |
Je souhaiterais donc :
- que la liste d'objets devienne une liste de cubes : std::list<cCube*> m_listeObjets
- eviter de re-coder les méthodes "afficherObjets", "trierObjets".... qui parcourent la liste d'objets avec des itérateurs
Quelle serait la méthode la plus simple/la plus propre ?
Avec des templates ?
J'ai jamais codé de template, quels sont les pièges à eviter ?
Merci !
EDIT :
Pour preciser ma pensée, voila comment je vois les choses :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
La classe cConteneur contient par defaut des cObjet :
class cConteneur<class C=cObjet> : public cObjet
{
public:
std::list<C*> m_listeObjets;
public:
void afficherObjets();
void trierObjets()
.....
} |
Code:
1 2 3 4 5 6 7
|
La classe cConteneurCube dérive de cConteneur mais contient des cCube :
class cConteneurCube : public cConteneur<cCube>
{
.....
} |
Mais je ne sais pas trop comment l'ecrire...