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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
class toto {
    string nom;
    int age;
 
    // getters et setters
    ...
}
une liste de toto
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
std::list<toto> listToto;
les foncteurs de recherche
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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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