По крайней мере, поскольку этот термин обычно используется в C ++ (Внимание: он используется полностью по-разному относительно других языков, таких как Haskell), функтор - это класс (или экземпляр класса), который перегружает operator()
так что его можно вызывать как функцию.
Поскольку они используют один и тот же синтаксис, шаблон может быть написан так, чтобы принимать либо указатель на функцию , либо экземпляр функтора взаимозаменяемо. Однако не все алгоритмы будут делать это - некоторые ожидают (например), что вы предоставите что-то с typedef
s для таких вещей, как argument_type
и result_type
. Стандартная библиотека предоставляет пару классов (unary_function
и binary_function
) для использования в качестве базовых классов для ваших функторов. Вы можете предоставить их самостоятельно, если хотите, - эти базовые классы предназначены исключительно для удобства (а некоторые люди не находят их особенно удобными).