table of contents
- Tumbleweed 2024.07.05-1.3
- Leap-16.0
std::move_only_function::operator()(3) | C++ Standard Libary | std::move_only_function::operator()(3) |
NAME¶
std::move_only_function::operator() - std::move_only_function::operator()
Synopsis¶
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.
Parameters¶
args - parameters to pass to the stored callable target
Return value¶
std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...).
Exceptions¶
Propagates the exception thrown by the underlying function call.
Example¶
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.
// Run this code
#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
See also¶
operator() invokes the target
(public member function of std::function<R(Args...)>)
operator() calls the stored function
(public member function of std::reference_wrapper<T>)
invoke invokes any Callable object with given arguments
invoke_r and possibility to specify return type
(C++17) (since C++23)
(C++23) (function template)
2024.06.10 | http://cppreference.com |