[C++] Функторы и предикаты

preview_player
Показать описание
В этом видео Вы узнаете, что такое функторы (функциональные объекты) и предикаты, а также когда и как их нужно использовать.

Задавайте Ваши вопросы:
Рекомендации по теме
Комментарии
Автор

Видео полезное, спасибо! Только вопрос, что может сделать функтор такое, что нельзя сделать стандартным способом. Т.е. Класс из видео я переделал вот так и в принципе не вижу разницы, кроме другой реализации. Работает все так же

class OtherFunctor
{
int even;
int odd;
public:
OtherFunctor() :even(0), odd(0) {}
void func(int b)
{
if (b % 2)
odd += b;
else even += b;
}
int geteven() const { return even; }
int getodd() const { return odd; }
};

bool evenPredicate(int x)
{
return x % 2 ? false : true;
}

int main()
{
OtherFunctor of;

int numm[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };

for (auto a : numm)
of.func(a);

cout << "even = " << of.geteven() << '|' << evenPredicate(of.geteven()) << endl;
cout << "odd = " << of.getodd() << '|' << evenPredicate(of.getodd()) << endl;

system("pause");
return 0;
}

владиус
Автор

Годно. Только зачем тернарный оператор понадобился - не очень понятно. Вполне можно было и так написать:
bool evenPredicate( int x )
{
return !( x % 2 );
}

gruik
Автор

И да, название функции я бы дал классическое - is_even. Ну или isEven.

gruik
Автор

Мне как начинающему удобство и необходимость функторов совсем не очевидна. Похоже просто на какую то фичу написанную ради фичи, разработчиками С++ По идее все точно также прекрасно делается простым методом класса, встречая в коде вызов метода класса сразу понятно, что это метод класса, понятно где искать определение, а встретишь функтор и уже не так очевидно. Непонятно именно назначение, зачем делать какие то вещи разными способами ведь это нада знать про них, знать как они работают, и чтобы другие читающие твой код знали как это работает, конечно если рассматривать это как некую техничную синтаксическую фичу то вопросов нет.

dmitryo