関数オブジェクト

関数オブジェクトとはなにか?
C++の設計と進化』に書いてあるのをそのまま引用すると、

「関数としての挙動を定義する適用演算子()を持つクラスのオブジェクト。」

ということらしい。

例えば、関数オブジェクトを使うと以下のようなコードが書けます。

#include <iostream>
using namespace std;

template<class T> struct Less_than{
	T value;
	Less_than(const T& v) : value(v){}
	bool operator()(const T& v) const { return v<value; }
};

int main(){
	Less_than<double> f(3.14);

	cout << " 3 < 3.14 ?  -> " << f(3) << endl;
	cout << " 4 < 3.14 ?  -> " << f(4) << endl;

	return 0;
}