Namespaces
Variants

std::move_only_function::operator()

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variable Argumentlisten
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Dreiseitiger Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
Funktionsobjekte
Funktionsaufruf
(C++17)(C++23)
Identitätsfunktionsobjekt
(C++20)
Transparente Operatorwrapper
(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)

Alte Binder und Adaptoren
(bis C++17*)
(bis C++17*)
(bis C++17*)
(bis C++17*)
(bis C++17*)(bis C++17*)(bis C++17*)(bis C++17*)
(bis C++20*)
(bis C++20*)
(bis C++17*)(bis C++17*)
(bis C++17*)(bis C++17*)

(bis C++17*)
(bis C++17*)(bis C++17*)(bis C++17*)(bis C++17*)
(bis C++20*)
(bis C++20*)
 
 
R operator()( Args... args ) /*cv*/ /*ref*/ noexcept(/*noex*/);
(seit C++23)

Ruft das gespeicherte aufrufbare Ziel mit den Parametern args auf. Die /*cv*/-, /*ref*/- und /*noex*/-Teile von operator() sind identisch mit denen des Template-Parameters von std::move_only_function.

Äquivalent zu return std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...);, wobei f ein cv-unqualifizierter Lvalue ist, der das Zielobjekt von *this bezeichnet, und /*cv-ref-cast*/(f) äquivalent ist zu:

  • fwenn cv ref entweder leer oder & ist, oder
  • std::as_const(f)wenn cv ref entweder const oder const & ist, oder
  • std::move(f)wenn cv ref && ist, oder
  • std::move(std::as_const(f))wenn cv ref const && ist.

Das Verhalten ist undefiniert, wenn *this leer ist.

Parameter

args - Parameter, die an das gespeicherte aufrufbare Ziel übergeben werden

Rückgabewert

std:: invoke_r < R > ( /*cv-ref-cast*/ ( f ) , std:: forward < Args > ( args ) ... ) .

Ausnahmen

Verbreitet die Ausnahme, die durch den zugrunde liegenden Funktionsaufruf ausgelöst wird.

Beispiel

Das folgende Beispiel zeigt, wie std::move_only_function an andere Funktionen als Wert übergeben werden kann. Außerdem zeigt es, wie std::move_only_function Lambdas speichern kann.

#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));
}

Ausgabe:

1
2
42

Siehe auch

ruft das Zielobjekt auf
(öffentliche Elementfunktion von std::function<R(Args...)> )
ruft die gespeicherte Funktion auf
(öffentliche Elementfunktion von std::reference_wrapper<T> )
(C++17) (C++23)
ruft jedes Callable Objekt mit gegebenen Argumenten auf mit Möglichkeit zur Rückgabetypspezifikation (seit C++23)
(Funktionstemplate)