stlにおける擬似関数functorの応用
stlの汎用アルゴリズムではfunctorの応用が多い.
template <typename T>
struct plus
{
T operator ()(const T& x, const T& y) { return x + y; }
};
template <typename T>
struct minus
{
T operator ()(const T& x, const T& y) { return x - y; }
};
void test()
{
plus<int> plusObj;
minus<int> minusObj;
cout << plusObj(32, 45) << endl;
cout << minusObj(32, 45) << endl;
cout << plus<int>()(32, 45) << endl;
cout << minus<int>()(32, 45) << endl;
}
汎用アルゴリズムでは,多くのalgorithmでは匿名オブジェクトのライフサイクルがアルゴリズムにあり,アルゴリズムが出た後に匿名オブジェクトが破棄されるため,後の「匿名オブジェクト」が多く適用される.
例:
inner_product(iv.begin(), iv.end(), iv.begin(), 10, minus<int>(), plus<int>())
adjacent_difference(iv.begin(), iv.end(), oite, plus<int>());
渡されるのはfunctorの匿名オブジェクトです.
functor、はっきり言ってoperator()への重荷