이것도 열혈 C++ 에서 간략히 알아봤던 내용이다.

함수 객체란 () operator 를 오버로딩 한 객체이다.

struct Functor
{
	void operator()(int a, int b)
	{
		cout ...
	}
}

함수 객체의 장점

함수처럼 동작하는 객체이므로 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있습니다. 또한, 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타임으로 인식합니다. 속도도 일반함수보다 빠르다. 함수의 주소를 전달하여 콜백한느 경우 인라인될 수 없지만 함수 객체는 인라인이 될 수 있고, 컴파일러가 쉽게 최적화 할 수 있다.

class Adder
{
	int total;
public:
	explicit Adder(int n = 0): total(n) { }
	int operator()(int n)
	{
		return total += n;
	}
};
int main()
{
	cout << add(10); //10
	cout << add(20); //30
	cout << add(30); //60
}
int main()
{
	for_each(arr, arr+5, Functor1()); //함수 포인터 대신 함수 객체를 넘긴다.
}