Namespaces
Variants

std::function<R(Args...)>:: 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 ) 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

Смотрите также

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