Если вы хотите хранить только функциональные указатели, вам не нужно std::function
:
using MyFunctionPointer = void(*)(int);
void func(int x);
std::set<MyFunctionPointer> orderedSet;
int main()
{
orderedSet.emplace(func);
}
Демо
Это работает, потому что вы можете сравнить (для std::set
) или хэш (для std::unordered set
) значений указателя на функцию.Но сравнение или хеширование std::function
экземпляров не реализовано в стандартной библиотеке, и нет переносимого способа добавить это после факта.
Редактировать: Как указано @ HolyBlackCat ,в то время как встроенная функция operator<
не обязана вызывать требуемый общий порядок для указателей функций, std::less
(как используется std::set
) требуется для этого для любого указателя.