STL의 함수객체
- 함수 객체는 클라이언트가 정의한 동작을 다른 구성 요소에 반영하기 위해 사용
- functional헤더에 정의 되어 있음
#include <iostream>
using namespace std;
struct LessFunctor // 1. 함수 객체 조건자
{
bool operator() (int left, int right) const
{
return (left < right);
}
};
bool LessFun(int left, int right) // 2. 함수 조건자
{
return (left < right);
}
int main()
{
bool (*LessPtr)(int, int) = LessFun // 3. 함수 포인터 조건자
LessFunctor lessFunctor;
cout << lessFunctor(10, 20) << endl; // 함수 객체로 비교
cout << LessFun(10 ,20) << endl; // 함수로 비교
cout << cout << LessPtr(10, 20) << endl; // 함수 포인터로 비교
}
plus<T> : 이항 연산 함수자로 +연산
minus<T> : 이항 연산 함수자로 -연산
multipies<T> : 이항 연산 함수자로 *연산
divides<T> : 이항 연산 함수자로 /연산
modules<T> : 이항 연산 함수자로 %연산
negate<T> : 단항 연산 함수자로 -연산
equal_to<T> : 이항 조건자로 == 연산
not_equal_to<T> : 이항 조건자로 != 연산
less<T> : 이항 조건자로 < 연산
less_equal<T> : 이항 조건자로 <= 연산
greater<T> : 이항 조건자로 > 연산
greater_equal<T> : 이항 조건자로 >= 연산
logical_and<T> : 이항 조건자로 &&연산
logical_or<T> : 이항 조건자로 ||연산
logical_not<T> : 단항 조건자로 !연산
bind1st : 이항 함수자의 첫 번째 인자를 고정하여 단항 함수자로 변환
bind2st : 이항 함수자의 두 번째 인자를 고정하여 단항 함수자로 변환
<예시>
binder1st<less<int>> binder = bind1st(less<int>(), 10)
binder2nd<less<int>> binder = bind2nd(less<int>(), 10)
not1 : 단항 조건자를 반대의 조건자로 변환
not2 : 이항 조건자를 반대의 조건자로 변환
<예시>
binary_negate<less<int>> negate = not2<less<int>())
unary_negate<binder2nd<less<int>>> negate = not1(binder)
mem_fun() : 객체로 멤버 함수를 호출
mem_fun_ref() : 객체의 주소로 멤버 함수를 호출