std function c
Функция std::function в C++ является оберткой для хранения и вызова различных видов функций, объектов или лямбда-выражений. Она представляет собой динамическую обертку, которая позволяет хранить любой тип функции, в том числе и указатель на функцию, функциональный объект или лямбда-выражение.
Примеры использования std::function:
1. Хранение указателя на функцию:
cpp
#include
#include
void printMessage(const std::string& message) {
std::cout << message << std::endl;
}
int main() {
std::function func = printMessage;
func("Hello, std::function!");
return 0;
}
В этом примере функция printMessage хранится в объекте std::function и вызывается с помощью оператора (). Результатом выполнения программы будет вывод на экран строки "Hello, std::function!".
2. Хранение функционального объекта:
cpp
#include
#include
struct Printer {
void operator()(const std::string& message) {
std::cout << message << std::endl;
}
};
int main() {
Printer printer;
std::function func = printer;
func("Hello, std::function!");
return 0;
}
В этом примере функциональный объект Printer хранится в объекте std::function и вызывается также с помощью оператора (). Результатом выполнения программы будет также вывод на экран строки "Hello, std::function!".
3. Хранение лямбда-выражения:
cpp
#include
#include
int main() {
std::function func = [](const std::string& message) {
std::cout << message << std::endl;
};
func("Hello, std::function!");
return 0;
}
В этом примере лямбда-выражение хранится в объекте std::function и вызывается также с помощью оператора (). Результатом выполнения программы будет вывод на экран строки "Hello, std::function!".
Таким образом, std::function позволяет хранить функции различных типов и вызывать их без необходимости знать конкретный тип функции. Это особенно полезно в ситуациях, когда тип функции должен быть определен динамически, например, при использовании коллбэков или стратегий в алгоритмах.