Share via


Objets de fonction

Un objet de fonction, ou le functor, est tout type qui implémente l'opérateur ().Cet opérateur s'agit de l'opérateur d'appel ou parfois de l'opérateur d'application.Les utilisations Standard Template Library s'exécutent des objets principalement comme critère de tri des conteneurs et des algorithmes.

les objets de fonction fournissent deux principaux avantages par rapport à un appel de fonction droit.le premier est qu'un objet de fonction peut contenir l'état.le deuxième est qu'un objet de fonction est un type et peut donc être utilisé comme paramètre de modèle.

créer un objet de fonction

Pour créer un objet de fonction, créez un type et implémente l'opérateur (), telle que :

class Functor
{
public:
    int operator()(int a, int b)
    {
        return a < b;
    }
};

int main()
{
    Functor f;
    int a = 5;
    int b = 7;
    int ans = f(a, b);
}

la dernière ligne de la fonction d' main montre comment vous appelez l'objet de fonction.Cet appel ressemble à un appel à une fonction, mais c'est précisément opérateur d'appeler () du type de Functor.Cette ressemblance entre appeler un objet de fonction et une fonction est comment l'objet de fonction de terme est survenu.

objets de fonction et conteneurs

La bibliothèque de modèles Standard contient plusieurs objets de fonction dans le fichier d'en-tête de <functional> .Une utilisation de ces objets de fonction est comme critère de tri pour les conteneurs.par exemple, le conteneur d' set est déclaré comme suit :

template <
    class Key,
    class Traits=less<Key>,
    class Allocator=allocator<Key> >
class set

le deuxième argument template est l'objet lessde fonction.Cet objet de fonction retourne true si le premier paramètre passé est moins que le deuxième paramètre passé.Étant donné que certains conteneurs trient leurs éléments, le conteneur requiert une façon de comparer deux éléments, et cela est accompli à l'aide de l'objet de fonction.Vous pouvez définir vos propres critères de tri des conteneurs en créant un objet de fonction et en spécifiant dans la liste de modèles pour le conteneur.

objets de fonction et algorithmes

Une autre utilisation d'objets fonctionnels est dans les algorithmes.par exemple, l'algorithme d' remove_if est déclaré comme suit :

template<class ForwardIterator, class Predicate>
    ForwardIterator remove_if(
        ForwardIterator _First,
        ForwardIterator _Last,
        Predicate _Pred
    );

Le dernier argument à remove_if est un objet de fonction qui retourne une valeur boolean ( un attribut).Si le résultat de l'objet de fonction est true, l'élément est supprimé du conteneur accessibles par les itérateurs _First et _Last.Vous pouvez utiliser l'un des objets de fonction déclarés dans l'en-tête de <functional> pour l'argument _Pred vous pouvez également créer vos propres.

Voir aussi

Référence

Modèles Standard