<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
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. |
|
Une classe de modèle fournissant une fonction membre qui annule la valeur de retour d'une fonction binaire spécifiée. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
Une classe qui wrap un objet appelable. |
|
Une classe qui calcule le code de hachage pour une valeur. |
|
Une classe qui teste si un type particulier est généré en appelant bind. |
|
Une classe qui teste si un type particulier est un espace réservé. |
|
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. |
|
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. |
|
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. |
|
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. |
|
Convertit un pointeur fonction binaire en une fonction binaire adaptable. |
|
Convertit un pointeur fonction unaire en une fonction unaire adaptable. |
|
Une classe qui encapsule une référence. |
|
Un struct qui contient le type de retour d'un objet appelable encapsulé. |
|
Une classe de modèle fournissant une fonction membre qui annule la valeur de retour d'une fonction unaire spécifiée. |
Fonctions
Lie des arguments à un objet appelable. |
|
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. |
|
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. |
|
Retourne le l'opérateur logique bit à bit AND (binary operator&) des deux paramètres. |
|
Retourne le complément logique bit à bit (operator~) du paramètre. |
|
Retourne le l'opérateur logique bit à bit OR (operator|) des deux paramètres. |
|
Retourne le l'opérateur logique bit à bit XOR (operator^) des deux paramètres. |
|
Construit une reference_wrapper const depuis un argument. |
|
Génère un wrapper d'appel simple. |
|
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. |
|
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. |
|
Retourne le complément d'un prédicat unaire. |
|
Retourne le complément d'un prédicat binaire. |
|
Fonction modèle d'assistance utilisée pour convertir les pointeurs de fonctions unaires et binaires, respectivement, en des fonctions adaptables unaires et binaires. |
|
Construit un reference_wrapper depuis un argument. |
|
Échanges deux objets function. |
Structures
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. |
|
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é. |
|
Prédicat binaire qui teste si une valeur d'un type spécifié est égale à une autre valeur de ce type. |
|
Prédicat binaire qui teste si une valeur d'un type spécifié est supérieure à une autre valeur de ce type. |
|
Prédicat binaire qui teste si une valeur d'un type spécifié est supérieure ou égale à une autre valeur de ce type. |
|
Prédicat binaire qui teste si une valeur d'un type spécifié est inférieure à une autre valeur de ce type. |
|
Prédicat binaire qui teste si une valeur d'un type spécifié est inférieure ou égale à une autre valeur de ce type. |
|
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. |
|
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. |
|
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. |
|
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é. |
|
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é. |
|
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é. |
|
La classe fournit un objet fonction prédéfini qui retourne le négatif d'une valeur d'élément. |
|
Prédicat binaire qui teste si une valeur d'un type spécifié n'est pas égale à une autre valeur de ce type. |
|
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é. |
|
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
Espaces réservés pour les arguments remplaçables. |
Opérateurs
Interdit la comparaison d'égalité d'objets appelable. |
|
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)