Назад к вопросам
Middle
194
questionbank

Что такое 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 может повлечь небольшие издержки по сравнению с прямым вызовом или использованием шаблонов, связанные с аллокацией памяти и виртуальными вызовами.