簡単なファンクタを考えてみましょう
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)
関数オブジェクトはオブジェクトですか??
それはばかげていませんか?