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 :
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; 
    } 
};
Puis, dans l'exemple ici, l'appel est fait de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 std::sort(v.begin(), v.end(), SortByNumber());
. Dans cette version y'a SortByNumber() les parenthèses.

Un peu plus loin dans le même exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
std::set<A, SortByString> s;
là y'a plus les parenthèses.

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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
sort (myvector.begin()+4, myvector.end(), myfunction)
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(), myvector.end(), myobject);
avec myobject étant définit comme suit :
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;
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 ?
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 ?