ファンクターの「力」を理解しようとしています。
さて、これらは関数へのポインターですが、実装されていない他のクラスでは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
では、ファンクターの真の力とは何でしょうか? 両方のクラスが状態を保存しますか、それともここで何か不足していますか?