Namensräume
Varianten
Aktionen

std::move_only_function::operator()

Von cppreference.com
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
Funktionsobjekte
Funktionsaufruf
(C++17)(C++23)
Identitätsfunktions-Objekt
(C++20)
Transparente Operator-Wrapper
(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 Teile /*cv*/, /*ref*/ und /*noex*/ 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 L-Wert ist, der das Zielobjekt von *this bezeichnet, und /*cv-ref-cast*/(f) äquivalent ist zu

  • f wenn 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.

Inhalt

[edit] Parameter

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

[edit] Rückgabewert

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

[edit] Ausnahmen

Propagiert die Ausnahme, die vom zugrunde liegenden Funktionsaufruf ausgelöst wird.

[edit] Beispiel

Das folgende Beispiel zeigt, wie std::move_only_function per Wert an andere Funktionen ü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

[edit] Siehe auch

ruft das Ziel auf
(public member function of std::function<R(Args...)>) [bearbeiten]
ruft die gespeicherte Funktion auf
(öffentliche Member-Funktion von std::reference_wrapper<T>) [bearbeiten]
(C++17)(C++23)
ruft jedes Callable-Objekt mit gegebenen Argumenten auf und der Möglichkeit, den Rückgabetyp anzugeben(seit C++23)
(Funktions-Template) [bearbeiten]