Namespaces
Variants

std::move_only_function:: operator()

From cppreference.net
Utilities library
Function objects
Function invocation
(C++17) (C++23)
Identity function object
(C++20)
Old binders and adaptors
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until C++20* )
( until C++17* ) ( until C++17* )
( until C++17* ) ( until C++17* )

( until C++17* )
( until C++17* ) ( until C++17* ) ( until C++17* ) ( until C++17* )
( until C++20* )
( until 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 является неквалифицированной по 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)
(шаблон функции)