Класс function
Класс function из заголовка <functional>
представляет собой полиморфную обёртку для вызываемых
сущностей: обычных функций, лямбда-выражений,
функциональных объектов и указателей на функции.
Объект function можно вызывать так же, как
обычную функцию, а внутри он хранит копию переданной
ему цели. Шаблонный параметр задаёт сигнатуру
вызова: тип возвращаемого значения и типы аргументов.
Синтаксис
#include <functional>
std::function<return_type(arg_types)> name;
Пример
Давайте сохраним в function обычную функцию
и вызовем её через объект:
#include <iostream>
#include <functional>
using namespace std;
int add(int a, int b)
{
return a + b;
}
int main()
{
function<int(int, int)> f = add;
cout << f(2, 3) << endl;
return 0;
}
Результат выполнения кода:
5
Пример
Давайте сохраним в function
лямбда-выражение и вызовем его:
#include <iostream>
#include <functional>
using namespace std;
int main()
{
function<int(int, int)> f = [](int a, int b) {
return a * b;
};
cout << f(2, 3) << endl;
return 0;
}
Результат выполнения кода:
6
Пример
Давайте проверим, хранит ли объект function
какую-либо цель, с помощью метода operator bool:
#include <iostream>
#include <functional>
using namespace std;
int main()
{
function<int(int, int)> f;
if (!f) {
cout << "empty" << endl;
}
f = [](int a, int b) {
return a + b;
};
if (f) {
cout << "not empty" << endl;
}
return 0;
}
Результат выполнения кода:
"empty"
"not empty"
Пример
Давайте сохраним в function функциональный
объект (функтор) и вызовем его:
#include <iostream>
#include <functional>
using namespace std;
struct Multiplier
{
int operator()(int a, int b) const
{
return a * b;
}
};
int main()
{
function<int(int, int)> f = Multiplier{};
cout << f(4, 5) << endl;
return 0;
}
Результат выполнения кода:
20
Пример
Давайте передадим function в другую функцию
в качестве параметра:
#include <iostream>
#include <functional>
using namespace std;
void apply(function<int(int, int)> f, int a, int b)
{
cout << f(a, b) << endl;
}
int main()
{
apply([](int a, int b) {
return a + b;
}, 3, 4);
apply([](int a, int b) {
return a * b;
}, 3, 4);
return 0;
}
Результат выполнения кода:
7
12
Смотрите также
-
тип
function-type,
который описывает тип функции -
тип
pointer,
который хранит адрес функции -
тип
void,
который используется для функций без возврата -
тип
bool,
который возвращает метод operator bool