<functional>

Définit les fonctions de bibliothèque standard C++ qui aident à construire des objets de fonction, également appelés functors, et leurs classeurs. Un objet de fonction est un objet d'un type qui définit operator(). Un objet de fonction peut être un pointeur fonction, mais en général il sert à stocker des informations supplémentaires accessibles pendant un appel de fonction.

Spécifications

Header :<functional>

Espace de noms : std

Notes

Les algorithmes nécessitent deux types d’objets de fonction : unaire et binaire. Les objets de fonction unaires nécessitent un argument et les objets de fonction binaires nécessitent deux arguments. Un objet de fonction et des pointeurs fonction peuvent être passés sous forme de prédicat à un algorithme, mais les objets de fonction sont également adaptables et augmentent la portée, la flexibilité et l’efficacité de la bibliothèque C++ Standard. Si, par exemple, une valeur doit être liée à une fonction avant d'être passée à un algorithme, vous ne pouvez pas utiliser un pointeur fonction. Les adaptateurs de fonction convertissent des pointeurs fonction en objets de fonction adaptables qui peuvent être liés à une valeur. L’en-tête <fonctionnel> contient également des adaptateurs de fonction membre qui permettent aux fonctions membres d’être appelées en tant qu’objets de fonction adaptables. Les fonctions sont adaptables si elles ont des déclarations de type imbriquées spécifiant leur argument et leurs types de retour. Les objets de fonction et leurs adaptateurs permettent à la bibliothèque C++ Standard de mettre à niveau les applications existantes et aident à son intégration dans l’environnement de programmation C++.

L’implémentation des objets de fonction en <fonction> inclut des functors d’opérateur transparents, qui sont des spécialisations des objets de fonction standard et ne prennent aucun paramètre de modèle, et effectuent un transfert parfait des arguments de fonction et un retour parfait du résultat. Ces spécialisations de modèle ne vous obligent pas à spécifier des types d'arguments quand vous appelez des foncteurs d'opérateurs arithmétiques, de comparaison, logiques et au niveau du bit. Vous pouvez surcharger des opérateurs arithmétiques, de comparaison, logiques ou au niveau du bit pour vos propres types, ou pour des combinaisons hétérogènes de types, puis utiliser les foncteurs d’opérateurs transparents en tant qu’arguments de fonction. Par exemple, si votre type MyType implémente operator<, vous pouvez appeler 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>()).

Les fonctionnalités suivantes sont ajoutées dans C++11, C++14 et C++17 :

  • Une signature d’appel est le nom d’un type de retour suivi d’une liste entre parenthèses de zéro, un ou plusieurs types d’arguments séparés par une virgule.

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

  • Un objet pouvant être appelé est un objet d’un type pouvant être appelé.

  • Un type de wrapper d’appel est un type qui contient un objet pouvant être appelé et prend en charge une opération d’appel qui transfère à cet objet.

  • Un wrapper d’appel est un objet d’un type de wrapper d’appel.

  • Un objet cible est l’objet pouvant être appelé contenu par un objet de wrapper d’appel.

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

  • (t1.*f)(t2, ..., tN) quand f est un pointeur vers une fonction membre de 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) quand f est un pointeur vers une fonction membre de classe T et 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 des données de membre 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 d'un type dérivé de T.

  • (*t1).*f quand N == 1 et f est un pointeur vers des données de membre 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) implicitement converti 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 du type de retour de T.

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

  • Si T est un type de classe qui a un type de membre result_type, result_type est un synonyme de T::result_type.

  • Sinon, il n'existe aucun membre result_type.

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 qui a 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é à l’aide d’une liste d’arguments arbitraires et qui remet les arguments à l’objet pouvant être appelé inclus dans un wrapper comme références. Tous les arguments rvalue sont remis en tant que références rvalue et les arguments lvalue sont remis en tant que références lvalue.

Members (Membres)

Classes

Nom Description
bad_function_call Classe qui décrit une exception levée pour indiquer qu’un appel à operator() sur un objet function a échoué car l’objet est vide.
binary_negate Modèle de classe fournissant une fonction membre qui annule la valeur de retour d’une fonction binaire spécifiée.
(Déconseillé en C++17.)
binder1st Modèle de classe fournissant un constructeur qui convertit un objet de fonction binaire en objet de fonction unaire en liant le premier argument de la fonction binaire à une valeur spécifiée.
(Déconseillé en C++11, supprimé en C++17.)
binder2nd Modèle de classe fournissant un constructeur qui convertit un objet de fonction binaire en objet de fonction unaire en liant le deuxième argument de la fonction binaire à une valeur spécifiée.
(Déconseillé en C++11, supprimé en C++17.)
boyer_moore_horspool_searcher
boyer_moore_searcher
const_mem_fun_ref_t Classe d’adaptateur qui permet à une fonction membre const qui n’accepte aucun argument d’être appelée comme objet de fonction unaire en cas d’initialisation avec un argument de référence.
(Déconseillé en C++11, supprimé en C++17.)
const_mem_fun_t Classe d’adaptateur qui permet à une fonction membre const qui n’accepte aucun argument d’être appelée comme objet de fonction unaire en cas d’initialisation avec un argument de pointeur.
(Déconseillé en C++11, supprimé en C++17.)
const_mem_fun1_ref_t Classe d’adaptateur qui permet à une fonction membre const qui accepte un seul argument d’être appelée comme objet de fonction binaire en cas d’initialisation avec un argument de référence.
(Déconseillé en C++11, supprimé en C++17.)
const_mem_fun1_t Classe d’adaptateur qui permet à une fonction membre const qui accepte un seul argument d’être appelée comme objet de fonction binaire en cas d’initialisation avec un argument de pointeur.
(Déconseillé en C++11, supprimé en C++17.)
default_searcher
function Classe qui encapsule un objet pouvant être appelé.
hash Classe qui calcule un code de hachage pour une valeur.
is_bind_expression Classe qui teste si un type particulier est généré en appelant bind.
is_placeholder Classe qui teste si un type particulier est un espace réservé.
mem_fun_ref_t Classe d’adaptateur qui permet à une non_const fonction membre qui ne prend aucun argument d’être appelé en tant qu’objet de fonction unaire lorsqu’elle est initialisée avec un argument de référence.
(Déconseillé en C++11, supprimé en C++17.)
mem_fun_t Classe d’adaptateur qui permet à une non_const fonction membre qui ne prend aucun argument d’être appelé en tant qu’objet de fonction unaire lorsqu’elle est initialisée avec un argument de pointeur.
(Déconseillé en C++11, supprimé en C++17.)
mem_fun1_ref_t Classe d’adaptateur qui permet à une non_const fonction membre qui accepte un seul argument d’être appelé en tant qu’objet de fonction binaire lorsqu’elle est initialisée avec un argument de référence.
(Déconseillé en C++11, supprimé en C++17.)
mem_fun1_t Classe d’adaptateur qui permet à une non_const fonction membre qui accepte un seul argument d’être appelé en tant qu’objet de fonction binaire lorsqu’elle est initialisée avec un argument de pointeur.
(Déconseillé en C++11, supprimé en C++17.)
pointer_to_binary_function Convertit un pointeur de fonction binaire en fonction binaire adaptable.
(Déconseillé en C++11, supprimé en C++17.)
pointer_to_unary_function Convertit un pointeur de fonction unaire en fonction unaire adaptable.
(Déconseillé en C++11, supprimé en C++17.)
reference_wrapper Classe qui encapsule une référence.
unary_negate Modèle de classe fournissant une fonction membre qui annule la valeur de retour d’une fonction unaire spécifiée.
(Déconseillé en C++17.)

Functions

Nom Description
bind Lie des arguments à un objet pouvant être appelé.
bind1st Classe de modèle d’assistance qui crée un adaptateur pour convertir un objet de fonction binaire en objet de fonction unaire en liant le premier argument de la fonction binaire à une valeur spécifiée.
(Déconseillé en C++11, supprimé en C++17.)
bind2nd Classe de modèle d’assistance qui crée un adaptateur pour convertir un objet de fonction binaire en objet de fonction unaire en liant le second argument de la fonction binaire à une valeur spécifiée.
(Déconseillé en C++11, supprimé en C++17.)
bit_and Retourne le bit AND (binaire operator&) des deux paramètres.
bit_not Retourne le complément au niveau du bit (operator~) du paramètre.
(Ajouté dans C++14.)
bit_or Retourne l’OR au niveau du bit (operator|) des deux paramètres.
bit_xor Retourne le XOR au niveau du bit (operator^) des deux paramètres.
cref Construit un reference_wrapper const à partir d'un argument.
invoke
mem_fn Génère un wrapper d'appel simple.
mem_fun Fonctions de modèle d’assistance utilisées pour construire des adaptateurs d’objets de fonction pour des fonctions membres en cas d’initialisation avec des arguments de pointeur.
(Déconseillé en C++11, supprimé en C++17.)
mem_fun_ref Fonction de modèle d’assistance utilisée pour construire des adaptateurs d’objets de fonction pour des fonctions membres en cas d’initialisation avec des arguments de référence.
not1 Retourne le complément d’un prédicat unaire.
(Déconseillé en C++17.)
not2 Retourne le complément d’un prédicat binaire.
(Déconseillé en C++17.)
not_fn Retourne le complément du résultat de son objet de fonction.
(Ajouté dans C++17.)
ptr_fun Fonction de modèle d'assistance utilisée pour convertir des pointeurs de fonction unaires et binaires, respectivement dans des fonctions adaptables unaires et binaires.
(Déconseillé en C++11, supprimé en C++17.)
ref Construit un reference_wrapper à partir d'un argument.
swap Échange deux objets function.

Structures

Nom Description
binary_function Classe de base vide qui définit des types qui peuvent être héritées par une classe dérivée qui fournit un objet de fonction binaire.
(Déconseillé en C++11, supprimé en C++17.)
divides La classe fournit un objet de fonction prédéfini qui effectue l'opération arithmétique de division sur des éléments d'un type 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 de fonction prédéfini qui effectue l'opération logique de conjonction sur des éléments d'un type valeur spécifié et teste si le résultat est vrai ou faux.
logical_not La classe fournit un objet de fonction prédéfini qui effectue l'opération logique de négation sur des éléments d'un type valeur spécifié et teste si le résultat est vrai ou faux.
logical_or La classe fournit un objet de fonction prédéfini qui effectue l'opération logique de disjonction sur des éléments d'un type valeur spécifié et teste si le résultat est vrai ou faux.
minus La classe fournit un objet de fonction prédéfini qui effectue l'opération arithmétique de soustraction sur des éléments d'un type valeur spécifié.
modulus La classe fournit un objet de fonction prédéfini qui effectue l'opération arithmétique de modulo sur des éléments d'un type valeur spécifié.
multiplies La classe fournit un objet de fonction prédéfini qui effectue l'opération arithmétique de multiplication sur des éléments d'un type valeur spécifié.
negate La classe fournit un objet de fonction prédéfini qui retourne la valeur négative 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 de fonction prédéfini qui effectue l'opération arithmétique d'addition sur des éléments d'un type valeur spécifié.
unary_function Classe de base vide qui définit des types qui peuvent être héritées par une classe dérivée qui fournit un objet de fonction unaire.
(Déconseillé en C++11, supprimé en C++17.)

Objets

Nom Description
_1.._M Espaces réservés pour les arguments remplaçables.

Opérateurs

Nom Description
operator== N'autorise pas la comparaison d'égalité d'objets pouvant être appelés.
operator!= N'autorise pas la comparaison d'inégalité d'objets pouvant être appelés.

Voir aussi

Informations de référence sur les fichiers d’en-tête
Sécurité des threads dans la bibliothèque C++ Standard
Informations de référence sur la bibliothèque standard C++