<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)
quandf
est un pointeur vers une fonction membre de classeT
ett1
est un objet de typeT
ou une référence à un objet de typeT
ou une référence à un objet d'un type dérivé deT
.((*t1).*f)(t2, ..., tN)
quandf
est un pointeur vers une fonction membre de classeT
ett1
n'est pas l'un des types décrits dans l'élément précédent.t1.*f
quand N == 1 etf
est un pointeur vers des données de membre d'une classeT
ett1
est un objet de typeT
ou une référence à un objet de typeT
ou une référence à un objet d'un type dérivé deT
.(*t1).*f
quand N == 1 etf
est un pointeur vers des données de membre d'une classeT
ett1
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 deT
.Si
T
est un pointeur vers une fonction membre,result_type
est un synonyme du type de retour deT
.Si
T
est un type de classe qui a un type de membreresult_type
,result_type
est un synonyme deT::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.
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++