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-ссылки*/ ( 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)
(шаблон функции) |