Namespaces
Variants

std::move_only_function::operator()

depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support de types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (déprécié en C++20)
 
Objets fonctions
Invocation de fonction
(C++17)(C++23)
Objet fonction identité
(C++20)
Wrapper d'opérateurs transparents
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Anciens binders et adaptateurs
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)
(jusqu'à C++17*)  
(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++20*)
(jusqu'à C++20*)
(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)

(jusqu'à C++17*)
(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)(jusqu'à C++17*)
(jusqu'à C++20*)
(jusqu'à C++20*)
 
 
R operator()( Args... args ) /*cv*/ /*ref*/ noexcept(/*noex*/);
(depuis C++23)

Invoque la cible appelable stockée avec les paramètres args. Les parties /*cv*/, /*ref*/ et /*noex*/ de operator() sont identiques à celles du paramètre template de std::move_only_function.

Équivalent à return std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...);, où f est une lvalue non qualifiée cv qui désigne l'objet cible de *this, et /*cv-ref-cast*/(f) est équivalent à :

  • f si cv ref est vide ou &, ou
  • std::as_const(f) si cv ref est const ou const &, ou
  • std::move(f) si cv ref est &&, ou
  • std::move(std::as_const(f)) si cv ref est const &&.

Le comportement est indéfini si *this est vide.

Paramètres

args - paramètres à passer à la cible appelable stockée

Valeur de retour

std:: invoke_r < R > ( /*conversion qualifiée-référence*/ ( f ) , std:: forward < Args > ( args ) ... ) .

Exceptions

Propage l'exception levée par l'appel de fonction sous-jacent.

Exemple

L'exemple suivant montre comment std::move_only_function peut être passé à d'autres fonctions par valeur. Il montre également comment std::move_only_function peut stocker des lambdas.

#include <iostream>
#include <functional>
void call(std::move_only_function<int() const> f)  // can be passed by value
{ 
    std::cout << f() << '\n';
}
int normal_function() 
{
    return 42;
}
int main()
{
    int n = 1;
    auto lambda = [&n](){ return n; };
    std::move_only_function<int() const> f = lambda;
    call(std::move(f));
    n = 2;
    call(lambda); 
    f = normal_function; 
    call(std::move(f));
}

Sortie :

1
2
42

Voir aussi

invoque la cible
(fonction membre publique de std::function<R(Args...)> )
appelle la fonction stockée
(fonction membre publique de std::reference_wrapper<T> )
(C++17) (C++23)
invoque tout objet Callable avec les arguments donnés et possibilité de spécifier le type de retour (depuis C++23)
(modèle de fonction)