std::move_only_function:: operator()
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Old binders and adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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
является неквалифицированной по cv lvalue, которая обозначает целевой объект
*
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)
(шаблон функции) |