std::move_only_function::operator()
From cppreference.com
< cpp | utility | functional | move only function
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 returnstd::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 cvref is either empty or &, or
- std::as_const(f) if cvref is either const or const&, or
- std::move(f) if cvref is &&, or
- std::move(std::as_const(f)) if cvref is const&&.
The behavior is undefined if *this is empty.
Contents |
[edit]Parameters
args | - | parameters to pass to the stored callable target |
[edit]Return value
std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...).
[edit]Exceptions
Propagates the exception thrown by the underlying function call.
[edit]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(){return42;} 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
[edit]See also
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) |