Spec-Zone.ru › C++

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

См. также

operator()
вызывает целевой
(общедоступный член-функция std::function<R(Args...)>)
operator()
вызывает сохранённую функцию
(общедоступный член-функция std::reference_wrapper<T>)
invokeinvoke_r
(C++17)(C++23)
вызывает любой вызываемый объект с заданными аргументами и возможностью указать тип возвращаемого значения(с C++23)
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/functional/move_only_function/operator()

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API