std::move_only_function::operator()
| 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...)>) | |
| ruft die gespeicherte Funktion auf (öffentliche Member-Funktion von std::reference_wrapper<T>) | |
| (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) |