Согласно ccpreference.com :
Шаблон класса std::function
является универсальной оболочкой функции polymorphi c. Экземпляры std::function
могут хранить, копировать и вызывать любую вызываемую цель - функции, лямбда-выражения, выражения привязки или другие объекты функций, а также указатели на функции-члены и указатели на элементы данных.
Сохраненный вызываемый объект называется целью std :: function. Если std::function
не содержит цели, он называется пустым. Вызов цели пустой std :: function приводит к возникновению исключения std::bad_function_call
.
std :: function удовлетворяет требованиям CopyConstructible и CopyAssignable.
std::function
is в основном обертка вокруг вызываемого объекта. Он известен как объект стирания типа - он стирает детали операций, чтобы обеспечить общий интерфейс.
Ваше std::bind
выражение
std::bind(&f1, std::placeholders::_1)
создает объект функции, который вызывает функцию f1
с параметром, который вы указываете в качестве заполнителя, а тип возвращаемого значения - int
. Следовательно, вы можете назначить это объекту функции с той же сигнатурой:
std::function<int(int)>
, который использует конструктор, принимающий вызываемый объект.