Bonjour � tous,
Je suis face � un petit probl�me de conception : je cherche � savoir s'il est possible d'�numer des types. Afin d'etre plus clair je vous donne mon code et je vous expose mon probl�me ensuite.
Compilateur: GCC
Environment: Code::Blocks v1
Le probl�me r�side dans l'appel de la m�thode size() contenu dans la methode GetSize() : size() est une m�thode g�n�rique sur les conteneurs de la stl et le compilateur (gcc) refuse ce code car il d�pend d'un template
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 NB: le code de la classe Interf_Register ne pose pas de probl�me ici: c'est juste une interface classique (je les notes par Interf_X ou X est le nom de la classe a interfacer). template <class INTERF_TYPE , class CONTENEUR_TYPE = std::vector<INTERF_TYPE *> > class Register : public Interf_Register, public CONTENEUR_TYPE { public: virtual std::string GetInfo_Summary(void); public: void Add (INTERF_TYPE* ToReg) {push_back(ToReg);} int GetSize(void) {return (int) size();} }; template <class INTERF_TYPE, class CONTENEUR_TYPE> std::string Register<INTERF_TYPE,CONTENEUR_TYPE>::GetInfo_Summary(void) { std::ostringstream oss; oss << "Registre: " << GetName() << " ; Contenu: " << GetSize() << " elements.\n"; return oss.str(); } QQ exemples d'application de ma classe pr�c�dente: typedef Register<Interf_Toto> Register_Toto; typedef Register<Interf_Amination, std::deque<Interf_Amination*> > Register_Animation;. Je pourrais lever ce probl�me en mettant le compilateur en mode permissif, mais j'aimerai �viter cela et garder en template le type de conteneur pour pouvoir facilement le changer plus tard (ad hoc).
En fait, je voudrais restrindre le choix de l'argument template "class CONTENEUR_TYPE" � une liste de conteneurs donn�s afin de rendre plus propre ce code et ca je ne sais pas faire... J'aurai besoin de vos suggestions et de votre exp�rience... SVP!!!
Peut-on faire une liste de classes � la mani�re d'une enum (j'y connais presque rien en enum)?
j'aurais aim� avoir un truc du style:
... mais c'est sans doute completement foireux... Auriez vous d'autre id�es pour faire restreidre cet argument template?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 template<class interface> enum MesConteneurQuiMArchent { std::vector<interface>, std::deque<interface>,... }; et pour les template de la class Register: template <class INTERF_TYPE , class MesConteneurQuiMArchent<INTERF_TYPE *> CONTENEUR_TYPE = std::vector<INTERF_TYPE *> >
En esp�rant avoir �t� assez clair, et merci d'avance pour votre aide![]()
Dalo
Partager