1

簡単なファンクタを考えてみましょう

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)関数オブジェクトはオブジェクトですか??

それはばかげていませんか?

4

1 に答える 1

1

関数オブジェクトの用語は、通常のオブジェクトの用語と同じです。ファンクターLessThan(10)には型があり、これはclass LessThan.

ファンクターは、関数 (つまり、"less than") とその引数の 1 つ (つまりint val) の組み合わせであることに注意してください。同じ効果は、ファンクター構成によって実現できます。

auto f = bind(less<int>(), _1, 10); // f is LessThan(10)

デモ。

于 2016-07-02T18:15:48.927 に答える