Namespaces
Variants

std::move_only_function::operator()

С ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (основные типы, RTTI)
Макросы проверки возможностей библиотеки (C++20)
Утилиты программ
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношения (deprecated в C++20)
Функции сравнения целых чисел
(C++20)(C++20)(C++20)    
(C++20)
Обмен и операции с типами
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общеупотребительные типы-словари
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
Функциональные объекты
Вызов функций
(C++17)(C++23)
Тождественный функциональный объект
(C++20)
Старые binder'ы и адаптеры
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
(до C++17*)(до C++17*)
(до C++17*)(до C++17*)

(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
 
 
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)
(шаблон функции)