Bonjour,
je rôdais sur la FAQ lorsque j'ai vu les foncteurs. J'en ai pas particulièrement besoin je regarde souvent la FAQ pour ma culture personnelle.
Je me suis arrêté sur un petit problème, dans la FAQ ici on définit un objet foncteur de cette manière :
Puis, dans l'exemple ici, l'appel est fait de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // Définition du foncteur servant à trier nos objets selon le nombre struct SortByNumber { bool operator ()( const A & a1, const A & a2 ) const { return a1.Number < a2.Number; } };
. Dans cette version y'a SortByNumber() les parenthèses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::sort(v.begin(), v.end(), SortByNumber());
Un peu plus loin dans le même exemple :
là y'a plus les parenthèses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::set<A, SortByString> s;
Du coup j'ai pas tout pigé la syntaxe, alors je vais voir un autre exemple sur cplusplus.com ici et là y'a un exemple où ça utilise une fonction comme ça :
Mais ce n'est pas tout, le second exemple utilise carrément un objet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part sort (myvector.begin()+4, myvector.end(), myfunction)
avec myobject étant définit comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part sort (myvector.begin(), myvector.end(), myobject);
Alors là je pige pas. Dans la première situation, on ne fait que déclarer un objet SortByNumber et on définit l'opérateur (). On est bien d'accord que il n'existe aucune "instance" de cette structure en mémoire contrairement à myobjet qui lui existe bien en mémoire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 struct myclass { bool operator() (int i,int j) { return (i<j);} } myobject;
Enfin bref, parenthèses, pas parenthèses, nom d'objet, nom de structure, ... je suis embrouillé là, j'ai dû oublier un ou deux concepts, pouvez-vous m'éclaircir ?
Partager