1 minute read

‘뇌를 자극하는 C++ STL - 공동환’ 책 및 c++ reference를 참고하여 작성한 포스트입니다.

함수 객체란

  • 함수 객체(Function Object)는 함수처럼 동작하는 객체이다.
  • 그러기 위해서는 () 연산자를 오버로딩해야 한다.
  • 함수자(Functor)라고도 불린다.

함수 객체의 장점

  • 객체이므로 멤버 변수와 멤버 함수를 가질 수 잇다.
  • 함수 객체는 인라인될 수 있기 때문에 일반 함수보다 빠르다.
  • 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타입으로 인식한다.
    • 아래와 같은 경우 operator()()와 서명이 같더라도 타입이 다른 함수 객체는 SomeFunc 클래스 객체에 대입하거나 복사할 수 없다.
class SomeFunc
{
public: // 해주어야 한다
	void operator()() {
		cout << " 함수 객체 " << endl;
	}
};

int main()
{
	SomeFunc func;
	func();
}

//  함수 객체

함수 객체 구현

  • STL에는 less(< 연산자의 함수 객체), greater(> 연산자의 함수 객체)가 정의되어 있다.
    • 이 둘은 bool 형을 반환하는 조건자(predicate)이다.
    • ‘functional’에 정의되어 있다.
int main()
{
	cout << less<int>()(10, 20) << ", ";
	cout << less<int>()(20, 10) << ", ";
	cout << greater<int>()(10, 20) << ", ";
	cout << greater<int>()(20, 10) << endl;
	return 0;
}
// 1, 0, 0, 1
struct Plus
{
	int operator()(int a, int b) {
		return a + b;
	}
};

int main()
{
	int n = 10, m = 20;
	cout << Plus()(n, m) << endl;
	return 0;
}

// 30

Leave a comment