<functional>

Définit les fonctions de bibliothèque standards qui aident à construire des objets fonctions, aussi appelés functors, et leurs classeurs. Un objet fonction est un objet d'un type qui définit operator(). Un objet fonction peut être un pointeur fonction, mais plus classiquement, l'objet est utilisé pour stocker des informations supplémentaires qui peuvent être consultées pendant un appel de fonction.

#include <functional>

Notes

Les algorithmes requièrent deux types d'objets fonction : unaire et binaire. Les objets fonctions unaires requièrent un argument, et les objets fonctions binaires requièrent deux arguments. Un objet fonction et des pointeurs fonctions peuvent être passés comme prédicat à un algorithme, mais les objets fonctions sont également adaptables et augmentent la portée, la flexibilité, et l'efficacité du STL. Si, par exemple, une valeur a besoin d'être liée à une fonction avant d'être passé à un algorithme, alors un pointeur de fonction ne peut pas être utilisé. Les adaptateurs de fonction convertissent des pointeurs de fonction en objets fonctions adaptables qui peuvent être liés à une valeur. L'en-tête <fonctionnelle> contient également les adaptateurs de fonction membre qui permettent aux fonctions membres d'être appelées comme objets fonctions adaptables. Les fonctions sont adaptables si elles possèdent des déclarations de type imbriquées spécifiant le types de leurs arguments et retours. La norme C++ exige que cette adaptabilité soit implémentée en ayant toutes les classes d'objets standards qui héritent des classes de base des fonctions binaires et unaires. Les objets fonction et leurs adaptateurs permettent à la bibliothèque STL de mettre à niveau les applications existantes et aident à intégrer la bibliothèque STL dans l'environnement de développement C++.

L'implémentation de Visual C++ des objets fonction en <fonctionnel> comprend les functors d'opérateurs transparents, qui sont des spécialisations des objets de fonction standard et ne prennent pas de paramètres de modèle, et exécute le transfert parfait des arguments de fonction et le retour parfait du résultat. Cette fonctionnalité fait partie de la spécification Draft Standard C++14. Ces spécialisations de modèle ne requièrent pas que vous spécifiez les types d'argument lorsque vous appeler des functors d'opérateur arithmétiques, de comparaison, logiques, et bit à bit. Vous pouvez surcharger les opérateurs arithmétiques, de comparaison, logiques, ou bit à bit pour vos propres types, ou pour des combinaisons hétérogènes des types, puis utiliser ces functors d'opérateur transparents comme arguments de fonction. Par exemple, si votre type MyType implémente operator<, appellez sort(my_collection.begin(), my_collection.end(), less<>()) au lieu de spécifier explicitement le type sort(my_collection.begin(), my_collection.end(), less<MyType>()).

Implémentation C++11/C++14.

Les fonctionnalités suivantes sont ajoutées dans l'implémentation de Visual C++ C++11/C++14 :

  • Signature d'appel est le nom d'un type de retour suivi d'une liste de zéros séparés par des virgules entre parenthèses ou de plus de types d'argument.

  • Un type appelé est un pointeur vers une fonction, un pointeur vers une fonction membre, un pointeur vers des données membres, ou un type de classe dont les objets peuvent apparaître immédiatement à la gauche d'un opérateur d'appel de fonction.

  • Un objet appelable est un objet d'un type appelable.

  • Type de wrapper d'appel est un type qui contient un objet appelable et prend en charge une opération d'appel qui transfère à cet objet.

  • Un wrapper d'appel est un objet du type wrapper d'appel.

  • Un objet cible est l'objet appelable géré par un objet wrapper d'appel.

La pseudo-fonction INVOKE(f, t1, t2, ..., tN) signifie l'une des choses suivantes :

  • (t1.*f)(t2, ..., tN) lorsque f est un pointeur vers une fonction membre de la classe T et t1 est un objet de type T ou une référence à un objet de type T ou une référence à un objet d'un type dérivé de T.

  • ((*t1).*f)(t2, ..., tN) lorsque f est un pointeur vers une fonction membre de la classe T et le t1 n'est pas l'un des types décrits dans l'élément précédent.

  • t1.*f quand N == 1 et f est un pointeur vers les données membres d'une classe T et t1 est un objet de type T ou une référence à un objet de type T ou une référence à un objet de type dérivé de T.

  • (*t1).*f lorsque == 1 de N et f est un pointeur vers les données membres d'une classe T et t1 n'est pas l'un des types décrits dans l'élément précédent.

  • f(t1, t2, ..., tN) dans tous les autres cas.

La pseudo-fonction INVOKE(f, t1, t2, ..., tN, R) signifie INVOKE(f, t1, t2, ..., tN) converti implicitement en R.

Si un wrapper d'appel a un type de résultat faible , le type de son type membre result_type est basé sur le type T de l'objet cible du wrapper, comme suit :

  • Si T est un pointeur vers une fonction, result_type est un synonyme pour le type de retour de T.

  • Si T est un pointeur vers une fonction membre, result_type est un synonyme pour le type de retour de T.

  • Si T est un type de classe possédant un type de membre result_type, result_type est un synonyme de T::result_type.

  • Sinon, il n'y a aucun result_typemembre.

Chaque wrapper d'appel a un constructeur de déplacement et un constructeur de copie. Un wrapper d'appel simple est un wrapper d'appel comportant un opérateur d'assignation et dont le constructeur de copie, le constructeur de déplacement, et l'opérateur d'assignation ne lèvent pas d'exceptions. Un wrapper d'appel de transfert est un wrapper d'appel qui peut être appelé en utilisant une liste d'arguments arbitraire qui fournit les arguments à l'objet appelable wrappé comme références. Tous les arguments rvalue sont remis comme des références rvalue, et les arguments lvalue sont remis comme références lvalue.

Classes

Mauvais appel de fonction

Une classe qui décrit une exception renvoyée pour indiquer qu'un appel à operator() sur un objet fonction a échoué car l'objet était vide.

binary_negate

Une classe de modèle fournissant une fonction membre qui annule la valeur de retour d'une fonction binaire spécifiée.

binder1st

Une classe de modèle fournissant un constructeur qui convertit un objet fonction binaire en un objet fonction unaire en liant le premier argument de la fonction binaire à une valeur spécifiée.

binder2nd

Une classe de modèle fournissant un constructeur qui convertit un objet fonction binaire en un objet fonction unaire en liant le second argument de la fonction binaire à une valeur spécifiée.

const_mem_fun_ref_t

Une classe d'adaptateur qui permet à une fonction membre const qui ne prend pas d'arguments d'être appelée comme objet fonction unaire une fois initialisée avec un argument de référence.

const_mem_fun_t

Une classe d'adaptateur qui permet à une fonction membre const qui ne prend pas d'arguments d'être appelée comme objet fonction unaire une fois initialisée avec un argument de pointeur.

const_mem_fun1_ref_t

Une classe d'adaptateur qui permet à une fonction membre const qui prend un seul argument d'être appelée comme objet fonction binaire une fois initialisée avec un argument de référence.

const_mem_fun1_t

Une classe d'adaptateur qui permet à une fonction membre const qui prend un seul argument d'être appelée comme objet fonction binaire une fois initialisée avec un argument de pointeur.

function

Une classe qui wrap un objet appelable.

hash

Une classe qui calcule le code de hachage pour une valeur.

is_bind_expression

Une classe qui teste si un type particulier est généré en appelant bind.

is_placeholder

Une classe qui teste si un type particulier est un espace réservé.

mem_fun_ref_t

Une classe d'adaptateur qui permet à une fonction membre non_const qui ne prend pas d'arguments d'être appelée comme objet fonction unaire une fois initialisée avec un argument de référence.

mem_fun_t

Une classe d'adaptateur qui permet à une fonction membre non_const qui ne prend pas d'arguments d'être appelée comme objet fonction unaire une fois initialisée avec un argument de pointeur.

mem_fun1_ref_t

Une classe d'adaptateur qui permet à une fonction membre non_const qui prend un seul argument d'être appelée comme objet fonction binaire une fois initialisée avec un argument de référence.

mem_fun1_t

Une classe d'adaptateur qui permet à une fonction membre non_const qui prend un seul argument d'être appelée comme objet fonction binaire une fois initialisée avec un argument de pointeur.

pointer_to_binary_function

Convertit un pointeur fonction binaire en une fonction binaire adaptable.

pointer_to_unary_function

Convertit un pointeur fonction unaire en une fonction unaire adaptable.

reference_wrapper

Une classe qui encapsule une référence.

result_of

Un struct qui contient le type de retour d'un objet appelable encapsulé.

unary_negate

Une classe de modèle fournissant une fonction membre qui annule la valeur de retour d'une fonction unaire spécifiée.

Fonctions

bind

Lie des arguments à un objet appelable.

bind1st

Une fonction modèle d'aide qui crée un adaptateur pour convertir un objet fonction binaire en un objet fonction unaire en liant le premier argument de la fonction binaire à une valeur spécifiée.

bind2nd

Une fonction modèle d'aide qui crée un adaptateur pour convertir un objet fonction binaire en un objet fonction unaire en liant le second argument de la fonction binaire à une valeur spécifiée.

bit_and

Retourne le l'opérateur logique bit à bit AND (binary operator&) des deux paramètres.

bit_not

Retourne le complément logique bit à bit (operator~) du paramètre.

bit_or

Retourne le l'opérateur logique bit à bit OR (operator|) des deux paramètres.

bit_xor

Retourne le l'opérateur logique bit à bit XOR (operator^) des deux paramètres.

cref

Construit une reference_wrapper const depuis un argument.

mem_fn

Génère un wrapper d'appel simple.

mem_fun

Les fonctions modèles d'assistance étaient auparavant utilisées pour construire des adaptateurs d'objet fonction pour les fonctions membres une fois initialisées avec les arguments de pointeur.

mem_fun_ref

Une fonction modèle d'assistance étaient auparavant utilisées pour construire des adaptateurs d'objet fonction pour les fonctions membres une fois initialisées avec les arguments de référence.

not1

Retourne le complément d'un prédicat unaire.

not2

Retourne le complément d'un prédicat binaire.

ptr_fun

Fonction modèle d'assistance utilisée pour convertir les pointeurs de fonctions unaires et binaires, respectivement, en des fonctions adaptables unaires et binaires.

ref

Construit un reference_wrapper depuis un argument.

échange

Échanges deux objets function.

Structures

binary_function

Classe de base vide qui définit les types qui peuvent être héritées par la classe dérivée qui fournit un objet fonction binaire.

divides

La classe fournit un objet fonction prédéfini qui exécute l'opération arithmétique de la division sur les éléments d'un type de valeur spécifié.

equal_to

Prédicat binaire qui teste si une valeur d'un type spécifié est égale à une autre valeur de ce type.

greater

Prédicat binaire qui teste si une valeur d'un type spécifié est supérieure à une autre valeur de ce type.

greater_equal

Prédicat binaire qui teste si une valeur d'un type spécifié est supérieure ou égale à une autre valeur de ce type.

less

Prédicat binaire qui teste si une valeur d'un type spécifié est inférieure à une autre valeur de ce type.

less_equal

Prédicat binaire qui teste si une valeur d'un type spécifié est inférieure ou égale à une autre valeur de ce type.

logical_and

La classe fournit un objet fonction prédéfini qui exécute l'opération logique de la conjonction sur des éléments d'un type de valeur spécifié et qui détermine la véracité du résultat.

logical_not

La classe fournit un objet fonction prédéfini qui exécute l'opération logique de la négation sur des éléments d'un type de valeur spécifié et qui détermine la véracité du résultat.

logical_or

La classe fournit un objet fonction prédéfini qui exécute l'opération logique de la disjonction sur des éléments d'un type de valeur spécifié et qui détermine la véracité du résultat.

moins

La classe fournit un objet fonction prédéfini qui exécute l'opération arithmétique de la soustraction sur les éléments d'un type de valeur spécifié.

modulus

La classe fournit un objet fonction prédéfini qui exécute l'opération arithmétique du module sur des éléments d'un type de valeur spécifié.

multiplie

La classe fournit un objet fonction prédéfini qui exécute l'opération arithmétique de la multiplication sur des éléments d'un type de valeur spécifié.

negate

La classe fournit un objet fonction prédéfini qui retourne le négatif d'une valeur d'élément.

not_equal_to

Prédicat binaire qui teste si une valeur d'un type spécifié n'est pas égale à une autre valeur de ce type.

plus

La classe fournit un objet fonction prédéfini qui exécute l'opération arithmétique de l'addition sur les éléments d'un type de valeur spécifié.

unary_function

Classe de base vide qui définit les types qui peuvent être héritées par la classe dérivée qui fournit un objet fonction unaire.

Objets

_1.._M

Espaces réservés pour les arguments remplaçables.

Opérateurs

operator==

Interdit la comparaison d'égalité d'objets appelable.

operator!=

Interdit la comparaison d'inégalité d'objets appelable.

Voir aussi

Référence

Sécurité des threads dans la bibliothèque standard C++

Bibliothèque STL (Standard Template Library)

Autres ressources

<functional> membres

Fichiers d'en-tête de bibliothèque standard C++