() 연산자(operator())를 오버로딩한 클래스의 객체이며, 간단히 말해 함수처럼 동작하는 객체를 의미합니다. 이 객체는 함수처럼 호출할 수 있습니다.
함수 객체(Function Object)라고도 불립니다.
<간단한 예시>
#include <iostream>
using namespace std;
class Adder {
int to_add;
public:
Adder(int n) : to_add(n) {}
int operator()(int x) {
return x + to_add;
}
};
int main() {
Adder add(5);
cout << add(10);
}
<결과값>
참고사항
요즘은 펑터의 모든 장점을 가지고 있으면서도 코드를 더 간결하게 표현할 수 있다는 점에서 펑터보다 람다 함수가 더 많이 쓰여지는 추세입니다.
STL 내부에서는 아직 기본적인 펑터가 사용되는 곳이 많이 있고, 특정 조건에서는 오히려 람다보다 더 간결하게 표현할 수 있기 때문에 펑터 또한 알아두면 좋습니다.
<실제 사용되는 펑터 예시>
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional> // greater와 less 펑터가 포함된 헤더
using namespace std;
int main() {
vector<int> v = { 5, 1, 4, 2, 3 };
sort(v.begin(), v.end(), greater()); // greater() 내림차순 펑터
cout << "Descending results : ";
for (const int & n : v) {
cout << n << ' ';
}
cout << endl;
sort(v.begin(), v.end(), less()); // less() 오름차순 펑터
cout << "Ascending results : ";
for (const int& n : v) {
cout << n << ' ';
}
return 0;
}
<결과값>