std::move_only_function::operator()
R operator()( Args... args ) /*cv*/ /*ref*/ noexcept(/*noex*/); | (начиная с C++23) |
Вызывает сохранённую целевую вызываемую функцию с параметрами args. Части /*cv*/, /*ref*/ и /*noex*/ в operator() идентичны соответствующим частям параметра шаблона std::move_only_function.
Эквивалентно return std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...);, где f — это lvalue без квалификаторов cv, обозначающее целевой объект *this, а /*cv-ref-cast*/(f) эквивалентно:
-
f, если cv ref пуст или&, или -
std::as_const(f), если cv ref равенconstилиconst &, или -
std::move(f), если cv ref равен&&, или -
std::move(std::as_const(f)), если cv ref равенconst &&.
Поведение не определено, если *this пуст.
Параметры
| args | - | параметры, передаваемые сохранённой целевой вызываемой функции |
Возвращаемое значение
std::invoke_r<R>(/*cv-ref-cast*/(f), std::forward<Args>(args)...).
Исключения
Передаёт исключение, выброшенное при вызове базовой функции.
Пример
В следующем примере показано, как std::move_only_function можно передавать другим функциям по значению. Также в нём показано, как std::move_only_function может хранить лямбда-выражения.
#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));
}
Вывод:
1 2 42
См. также
| вызывает целевой объект (открытая функция-член std::function<R(Args...)>) |
|
| вызывает сохранённую функцию (открытая функция-член std::reference_wrapper<T>) |
|
|
(C++17)(C++23) | вызывает любой объект Callable с заданными аргументами с возможностью указать тип возвращаемого значения(начиная с C++23) (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/functional/move_only_function/operator()