Bonjour, j'aimerais faire un vecteur trié. cependant, j'obtiens quelques problèmes au niveau de la spécialisation des templates pour les pointeurs.
Voici ce que j'ai fait jusqu'à présent et qui ne gère pas cette aspect :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 template<typename Object, typename Sort,class Storing=std::list<std::pair<Object*,Sort>>> class Sorted { private : Storing List; public : Sorted()=default/*J'utilise c++0x*/; Sorted(const Sorted&)=delete; Sorted& operator=(Sorted&)=delete; ~Sorted()=default; void AddElement(Object* Element, Sort Position); inline void EraseElement(Object* Element); inline void ForEach(void (Object::*Function)(void)); };Mon problème :
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 template<typename Object, typename Sort, class Storing> inline void Sorted<Object, Sort, Storing>::AddElement(Object* Element, Sort Position) { typename Storing::iterator it; for(it=List.begin();it!=List.end();it++) if(it->second<=Position) break; List.insert(it,std::make_pair(Element,Position)); } template<typename Object, typename Sort, class Storing> void Sorted<Object, Sort, Storing>::EraseElement(Object* Element) { for(auto/*J'utilise c++0x*/ it=List.begin();it!=List.end();it++) { if(it->first==Element) { List.erase(it); return ; } } } template<typename Object, typename Sort, class Storing> inline void Sorted<Object, Sort, Storing>::ForEach(void (Object::*Function)(void)) { for(auto it=List.begin();it!=List.end();it++) (it->first->*Function)(); }
-Cette classe ne marche pour l'instant que si Object est un pointeur et si sort n'est pas un pointeur. Comment adapté pour que sa marche dans tous les cas ?
-D'autres problèmes ? (Peut être on peut faire un Storing = std::list sans spécifier les template de la liste ? ce qui permettrais, si on veut un vector de juste passer un std::vector et non std::vector<std::pair<...>>)
J'espère que le code est assez explicite pour comprendre ce que la classe fait (c'est un conteneur trié).
Merci de votre aide.
Partager