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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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...