R operator()( Args... args ) /*cv*/ /*ref*/ noexcept(/*noex*/); | (since C++23) |
Invokes the stored callable target with the parameters args. The /*cv*/, /*ref*/, and /*noex*/ parts of operator() are identical to those of the template parameter of std::move_only_function.
Equivalent to return std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...);, where f is a cv-unqualified lvalue that denotes the target object of *this, and /*cv-ref-cast*/(f) is equivalent to:
f if cv ref is either empty or &, or std::as_const(f) if cv ref is either const or const &, or std::move(f) if cv ref is &&, or std::move(std::as_const(f)) if cv ref is const &&. The behavior is undefined if *this is empty.
| args | - | parameters to pass to the stored callable target |
std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...).
Propagates the exception thrown by the underlying function call.
The following example shows how std::move_only_function can passed to other functions by value. Also, it shows how std::move_only_function can store 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));
}Output:
1 2 42
| invokes the target (public member function of std::function<R(Args...)>) |
|
| calls the stored function (public member function of std::reference_wrapper<T>) |
|
|
(C++17)(C++23) | invokes any Callable object with given arguments and possibility to specify return type (since C++23) (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/functional/move_only_function/operator()