이것도 열혈 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()); //함수 포인터 대신 함수 객체를 넘긴다.
}