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