Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Класс function
Сохранить указатель на функцию позволяет также класс function
. Прежде чем использовать класс, следует подключить заголовочный файл functional
:
#include <functional>
Создание объекта осуществляется по следующим схемам:
std::function<Сигнатура_функции> func1(Название_функции);
std::function<Сигнатура_функции> func2 = Название_функции;
std::function<Сигнатура_функции> func3;
func3 = Название_функции;
std::function<Сигнатура_функции> func4 = nullptr;
func4 = Название_функции;
Внутри угловых скобок указывается сигнатура функции, состоящая из типа возвращаемого значения и типов параметров через запятую внутри круглых скобок, например, void()
или int(int,int)
. Вызов функции осуществляется как обычно, с помощью круглых скобок, внутри которых через запятую указываются передаваемые значения. Если объект хранит нулевой указатель и при этом производится вызов функции, то генерируется исключение bad_function_call
.
Пример использования класса function
приведен в листинге 12.25.
Листинг 12.25. Класс function
#include <iostream>
#include <functional>
void print_ok();
void print(const char *str);
int sum(int x, int y);
int func(int x, int y, std::function<int(int,int)> f);
int main() {
// Создание объектов
std::function<void()> func1;
func1 = print_ok;
std::function<void(const char*)> func2(print);
std::function<int(int,int)> func3 = nullptr;
func3 = sum;
// Вызов функций
func1(); // OK
func2("1"); // 1
std::cout << func3(30, 10) << std::endl; // 40
// Передача в функцию
std::cout << func(10, 5, sum) << std::endl; // 15
return 0;
}
void print_ok() {
std::cout << "OK" << std::endl;
}
void print(const char *str) {
std::cout << str << std::endl;
}
int sum(int x, int y) {
return x + y;
}
int func(int x, int y, std::function<int(int,int)> f) {
return f(x, y);
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов