Терминология окружающих функторов
Давайте возьмем простой функтор
class LessThan {
public:
explicit LessThan (int in ) : val(in) {}
bool operator() (int param) const {
return param < val;
}
private:
int val;
};
который я могу использовать, например, как это -
vector<int> myVector = factory();
size_t count = count_if(begin(myVector), end(myVector), LessThan(10));
Я понимаю терминологию, окружающую функторы, что класс LessThan
это функтор то есть это тип, а не объект. то есть это абстрактно, а не конкретно.
Итак, что мы называем LessThan(10)
? Здесь мы создаем объект, создавая LessThan
тип функтора. Итак, мы называем это объектом функтора? Но функторы являются функциональными объектами. Так, LessThan(10)
такое объект-объект??
Разве это не абсурд?
1 ответ
Терминология для функциональных объектов такая же, как терминология для обычных объектов: ваш функтор LessThan(10)
имеет тип, который class LessThan
,
Обратите внимание, что ваш функтор представляет собой комбинацию функции (т.е. "меньше чем") и одного из ее аргументов (т.е. int val
). Тот же эффект может быть достигнут с помощью функторной композиции:
auto f = bind(less<int>(), _1, 10); // f is LessThan(10)
Demo.