Что такое std::function в C++?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
std::function — это полиморфный обёртка для любых вызываемых объектов (функций, указателей на функции, лямбда-выражений, фанкторов, указателей на функции-члены). Она позволяет унифицировать синтаксис вызова для различных типов объектов, которые можно вызвать.
Основные возможности:
- Хранение callable объектов: Может хранить любой объект, для которого определён оператор
()или который может быть вызван как функция. - Типобезопасность: Проверяет сигнатуру хранимого объекта на этапе компиляции.
- Полиморфизм: Позволяет работать с различными типами callable объектов единообразно.
Пример использования:
#include <functional>
#include <iostream>
void simple_function(int x) {
std::cout << "Simple function called with: " << x << std::endl;
}
struct Functor {
void operator()(int x) const {
std::cout << "Functor called with: " << x << std::endl;
}
};
int main() {
std::function<void(int)> func; // Объявление std::function, принимающей int и возвращающей void
func = simple_function; // Присваиваем функцию
func(10);
func = [](int x) { // Присваиваем лямбда-выражение
std::cout << "Lambda called with: " << x << std::endl;
};
func(20);
func = Functor(); // Присваиваем фанктор
func(30);
return 0;
}
std::function удобен для реализации колбэков, хранения функций с различными источниками, но одним интерфейсом, и для передачи вызываемых объектов в качестве аргументов функции. Стоит учитывать, что использование std::function может повлечь небольшие издержки по сравнению с прямым вызовом или использованием шаблонов, связанные с аллокацией памяти и виртуальными вызовами.