Я пытаюсь понять «силу» функторов.
Итак, они являются указателями на функции, но что они могут делать такого, чего не могут другие классы, не реализующие operator()
?
Например :
#include <iostream>
#include <assert.h>
#include <vector>
using namespace std;
class MultiplyBy
{
private:
int factor;
public:
MultiplyBy(int x) : factor(x) {}
int operator () (int other) const
{
return factor * other;
}
};
int main()
{
MultiplyBy temp(5);
int myResult = temp(5); // now myResult holds 25
cout << myResult << endl;
return 0;
}
И мы берем его другого друга
class MultiplyOther
{
private:
int factor;
public:
MultiplyOther(int x) : factor(x) {}
int invokeMultiplyMe(int _other)
{
return _other * factor;
}
};
И сделайте то же самое:
int main()
{
// MultiplyOther
MultiplyOther notFunctor(4);
int myOther = notFunctor.invokeMultiplyMe(3);
cout << myOther << endl;
return 0;
}
И мы получаем:
25
12
Тогда какова реальная мощность функтора? Оба класса сохраняют состояние, или я что-то здесь упускаю?