Spec-Zone.ru › C++

std::function<R(Args...)>::operator()

R operator()( Args... args ) const;
(начиная с C++11)

Вызывает сохранённый вызываемый объект-функцию с параметрами args.

Фактически выполняет INVOKE<R>(f,std::forward<Args>(args)...), где f — это целевой объект *this.

Параметры

args - параметры, передаваемые сохранённому вызываемому объекту-функции

Возвращаемое значение

Отсутствует, если R имеет тип void. В противном случае возвращается результат вызова сохранённого вызываемого объекта.

Исключения

Выбрасывает std::bad_function_call, если *this не хранит вызываемый объект-функцию, то есть !*this == true.

Пример

В следующем примере показано, как std::function можно передавать другим функциям по значению. Кроме того, показано, как std::function может хранить лямбда-выражения.

#include <functional>
#include <iostream>

void call(std::function<int()> f) // can be passed by value
{ 
    std::cout << f() << '\n';
}

int normal_function()
{
    return 42;
}

int main()
{
    int n = 1;
    std::function<int()> f;
    try
    {
        call(f);
    }
    catch (const std::bad_function_call& ex)
    {
        std::cout << ex.what() << '\n';
    }

    f = [&n](){ return n; };
    call(f);

    n = 2;
    call(f);

    f = normal_function;
    call(f);

    std::function<void(std::string, int)> g;
    g = [](std::string str, int i) { std::cout << str << ' ' << i << '\n'; };
    g("Hi", 052);
}

Возможный вывод:

bad_function_call
1
2
42
Hi 42

См. также

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

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

Spec-Zone.ru

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