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 31 32 33
| /* Le même avec plusieurs fonctions...
* considérons que celles qui doit effectivement faire appel à l'opérateur() ne connaisse pas les personnes en question
*/
struct LessByNameThenFirstName{
LessByNameThenFirstName(Personne const & a, Personne const & b):
a_{a},b_{b}{}
Personne /* const & */ a_;
Personne /* const & */ b_;
/* les opérateurs de comparaisons renvoient toujours un booléen
* Il n'y a plus besoin de fournir les personnes en paramètre, vu qu'on les connait
* déjà (en tant que données membres
*/
bool operator()() const{
return a_.nom() < b_.nom() || /* OK pour "Alcazar" et "Dupond"
(a_.nom() == b_.nom() && a_.prenom() < b_.prenom()) ; // OK pour Durand Albert et Durant Josephine
}
};
void foo(LessByNameThenFirstName const & functor){
/* ... */
if(functor() ) {
/* ... */
}
}
int main(){
Personne a;
Personne b;
/* nous pouvons instancier notre foncteur comme n'importe quel autre structure classique */
LessByNameThenFirstName functor{a,b};
/* puis nous pouvons l'utiliser comme n'importe variable, par exemple, en le transmettant à foo
*/
foo(functor));
return 0;
} |
Partager