РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
75 of 815 menu

Класс 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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить