Терминология окружающих функторов

Давайте возьмем простой функтор

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.

Другие вопросы по тегам