함수 호출에 사용되는, 인자의 전달에 사용되는 () 도 연산자이다. 따라서 이 연산자 역시 오버로딩이 가능한 연산자이다.


ex) adder(4, 5); 가 있다면 adder.operator()(4, 5); 이렇게 해석이 된다.




위 예제에서 정의한 Adder 클래스와 같이 함수처럼 동작하는 클래스를 가리켜 '펑터(Functor)' 라 한다.

그리고 '함수 오브젝트(Function Object)' 라고도 불린다.





펑터의 위력 & 활용


- 펑터는 함수 또는 객체의 동작방식에 유연함을 제공할 때 주로 사용된다.



매개변수 형이 SortRule 의 참조형이므로, SortRule 클래스를 상속하는 AscendingSort 클래스와 DescendingSort 클래스의 객체는 인자로 전달 가능하다. 그리고 SortRule 의 operator() 함수는 virtual 로 선언되었으니, 유도 클래스의 operator() 함수가 대신 호출된다. 

때문에 펑터로 무엇이 전달되느냐에 따라서 정렬의 기준이 바뀌게 된다. 그리고 이것이 펑터를 정의하는 이유이다.

Posted by scii
: