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
См. также
| вызывает целевой объект (открытая функция-член std::move_only_function) |
|
| вызывает сохранённую функцию (открытая функция-член std::reference_wrapper<T>) |
|
|
(C++11) | исключение, выбрасываемое при вызове пустого std::function (класс) |
|
(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()