Function objects
Un objet fonction est tout objet pour lequel l'opérateur d'appel de fonction est défini. C++ fournit de nombreux objets fonction intégrés ainsi qu'une prise en charge pour la création et la manipulation de nouveaux objets fonction.
Invocation de fonction
|
L'opération d'exposition uniquement
Soit le type
|
(depuis C++11) |
std::invoke
et
std::invoke_r
(depuis C++23)
peuvent invoquer tout objet
Callable
avec des arguments donnés selon les règles de
INVOKE
et
INVOKE<R>
(depuis C++23)
.
|
(C++17)
(C++23)
|
invoque tout
Callable
objet avec les arguments donnés
et possibilité de spécifier le type de retour
(depuis C++23)
(modèle de fonction) |
Enveloppes de fonction
Ces classes d'encapsulation polymorphes offrent une prise en charge pour le stockage d'objets fonction arbitraires.
|
(C++11)
|
enveloppe copiable de tout objet appelable copiable
(modèle de classe) |
|
(C++23)
|
enveloppe non-copiable de tout objet appelable prenant en charge les qualificateurs dans une signature d'appel donnée
(modèle de classe) |
|
(C++26)
|
enveloppe copiable de tout objet appelable copiable prenant en charge les qualificateurs dans une signature d'appel donnée
(modèle de classe) |
|
(C++26)
|
enveloppe non-propriétaire de tout objet appelable
(modèle de classe) |
|
(C++11)
|
l'exception levée lors de l'appel d'un
std::function
vide
(classe) |
|
(C++11)
|
crée un objet fonction à partir d'un pointeur vers un membre
(modèle de fonction) |
Identité
std::identity est l'objet fonction identité : il retourne son argument inchangé.
|
(C++20)
|
objet fonction qui retourne son argument inchangé
(classe) |
Application partielle de fonction
std::bind_front et std::bind fournissent un support pour l' application partielle de fonctions , c'est-à-dire la liaison d'arguments à des fonctions pour produire de nouvelles fonctions.
|
(C++20)
(C++23)
|
lie un nombre variable d'arguments, dans l'ordre, à un objet fonction
(modèle de fonction) |
|
(C++11)
|
lie un ou plusieurs arguments à un objet fonction
(modèle de fonction) |
|
(C++11)
|
indique qu'un objet est une expression
std::bind
ou peut être utilisé comme telle
(modèle de classe) |
|
(C++11)
|
indique qu'un objet est un espace réservé standard ou peut être utilisé comme tel
(modèle de classe) |
|
Défini dans l'espace de noms
std::placeholders
|
|
|
(C++11)
|
espaces réservés pour les arguments non liés dans une expression
std::bind
(constante) |
Négateurs
std::not_fn crée un objet fonction qui nie le résultat de l'objet appelable qui lui est passé.
|
(C++17)
|
crée un objet fonction qui retourne le complément du résultat de l'objet fonction qu'il contient
(modèle de fonction) |
Chercheurs
Des chercheurs implémentant plusieurs algorithmes de recherche de chaînes sont fournis et peuvent être utilisés directement ou avec std::search .
|
(C++17)
|
implémentation de l'algorithme de recherche standard de la bibliothèque C++
(modèle de classe) |
|
(C++17)
|
implémentation de l'algorithme de recherche Boyer-Moore
(modèle de classe) |
|
(C++17)
|
implémentation de l'algorithme de recherche Boyer-Moore-Horspool
(modèle de classe) |
Enveloppes de référence
Les références enveloppées permettent aux arguments de référence d'être stockés dans des objets fonction copiables :
|
(C++11)
|
CopyConstructible
et
CopyAssignable
wrapper de référence
(modèle de classe) |
|
(C++11)
(C++11)
|
crée un
std::reference_wrapper
avec un type déduit de son argument
(modèle de fonction) |
|
(C++20)
(C++20)
|
obtient le type de référence encapsulé dans
std::reference_wrapper
(modèle de classe) |
Objets fonction transparents
Conteneurs associatifs
et
conteneurs associatifs non ordonnés
(depuis C++20)
fournissent des opérations de recherche hétérogène
et d'effacement
(depuis C++23)
, mais elles ne sont activées que si le type d'objet fonction fourni
Tous les types d'objets fonction transparents dans la bibliothèque standard définissent un type imbriqué
|
(depuis C++14) |
Objets fonction d'opérateur
C++ définit les objets fonction suivants qui représentent les opérations arithmétiques et logiques courantes.
|
Les spécialisations void déduisent leurs types de paramètres et types de retour de leurs arguments, elles sont toutes transparentes . |
(depuis C++14) |
Opérations arithmétiques |
|
|
objet fonction implémentant
x
+
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
+
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
-
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
-
y
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
*
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
*
y
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
/
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
/
y
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
%
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
%
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
-
x
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
-
x
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
Comparaisons |
|
|
objet fonction implémentant
x
==
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
==
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
!
=
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
!
=
y
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
>
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
>
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
<
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
<
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
>=
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
>=
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
<=
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
<=
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
Opérations logiques |
|
|
objet fonction implémentant
x
&&
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
&&
y
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
||
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
||
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
!
x
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
!
x
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
Opérations bit à bit |
|
|
objet fonction implémentant
x
&
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
&
y
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
|
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
|
y
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
|
objet fonction implémentant
x
^
y
(modèle de classe) |
|
|
(C++14)
|
objet fonction implémentant
x
^
y
avec déduction des types de paramètres et de retour
(spécialisation de modèle de classe) |
|
(C++14)
|
objet fonction implémentant
~x
(modèle de classe) |
|
(C++14)
|
objet fonction implémentant
~x
déduisant les types de paramètres et de retour
(spécialisation de modèle de classe) |
Objets fonction de comparaison contraintsLes objets fonction de comparaison suivants sont contraints .
Tous ces objets fonction sont transparents .
|
(depuis C++20) |
Éléments d'assistanceLes éléments suivants, à exposition uniquement, sont utilisés pour plusieurs composants de la bibliothèque standard mais ils ne font pas partie de l'interface de la bibliothèque standard.
|
(depuis C++26) |
Anciens binders et adapteursPlusieurs utilitaires qui fournissaient un support fonctionnel précoce sont obsolètes et supprimés :
|
(jusqu'à C++20) | ||||||||||||||||||||||||||||||||||||
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 185 | C++98 | l'utilisation d'objets fonction améliorait l'efficacité du programme | supprimé l'affirmation |
| LWG 660 | C++98 | les objets fonction pour les opérations bit à bit manquaient | ajoutés |
| LWG 2149 | C++98 |
les objets fonction prenant un ou deux arguments devaient
fournir des types imbriqués pour désigner les types d'arguments et de résultat |
non requis |
| LWG 2219 | C++11 |
INVOKE
ne gérait pas correctement
std::reference_wrapper
|
gère correctement |
| LWG 2420 | C++11 |
INVOKE<R>
ne rejetait pas la valeur de retour si
R
est
void
|
rejette la valeur de retour dans ce cas |
|
LWG 2926
( P0604R0 ) |
C++11 |
la syntaxe de l'opération
INVOKE
avec un type de
retour
R
était
INVOKE
(
f, t1, t2, ..., tN, R
)
|
changé en
INVOKE<R>
(
f, t1, t2, ..., tN
)
|
| LWG 3655 | C++11 |
INVOKE
ne gérait pas correctement les unions
en raison de la résolution de LWG issue 2219 |
gère correctement |