[std::list][find_if] problème avec mes foncteurs
Bonjour à tous.
Me voila devant un problème devant lequell je n'arrive pas a me dépatouiller.
J'essaye de permettre une recherche sur les différents attributs de qqs objetcs stockés au sein d'une liste.
Les prérequis :
une classe toto
Code:
1 2 3 4 5 6 7 8
|
class toto {
string nom;
int age;
// getters et setters
...
} |
une liste de toto
Code:
1 2
|
std::list<toto> listToto; |
les foncteurs de recherche
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
struct rechercheNom {
rechercheNom(const string &s): nom(s) {}
bool operator()(const Contact & obj1) const {
return obj1.getNom() == nom;
}
private:
string nom;
};
struct rechercheAge {
rechercheAge(const int&i): age(i) {}
bool operator()(const Contact & obj1) const {
return obj1.getAge() == age;
}
private:
int age;
}; |
la fonction de recherche
Code:
1 2 3 4 5 6 7 8 9 10
|
template<class T> ListToto* ListToto::rechercherListe(int colonne, T critere) {
switch(colonne) {
// nom
case 1 : find_if(listToto->begin(), listToto->end(), rechercheNom(critere));break;
case 2 : find_if(listToto->begin(), listToto->end(), rechercheAge(critere);break;
}
// On ne s'occupe pas du retour pour le moment
return this;
} |
Dans l'état actuel, le code n'a pas l'air trop mal et le compilateur ne dit rien a la compilation.
Mais voila un petit main rapide qui lui, pose problème au compilateur
Code:
1 2 3 4 5 6 7 8 9 10
|
main(void) {
// Recherche du premier object ayant comme nom "nico"
listToto.rechercherListe<string>(1, "nico");
// Erreur : impossible de convertir 'string' en 'rechercheAge'
// Recherche du premier object ayant comme age 20 ans
listToto.rechercherListe<int>(2, 20);
// Erreur : impossible de convertir 'int' en 'rechercheNom'
} |
Donc voila, je comprend pourquoi le compilateur ne veut pas compiler, étant donné qu'il ne peut pas savoir a l'avance quelle sera la bonne methode appellée.
Mais je ne trouve pas de solution alternative pour éviter ce problème.
Je suis sur qu'un d'entre vous aura une bonne idée à tout cela :)