반응형

연산자 재정의 활용

함수 객체( Function Object )

  • 정의
    •  () 연산자를 재정의해서 함수처럼 사용 가능한 객체
    • "Function Object" 또는 "Functor" 라고도 부른다.
  • 장점
    • 특정 상황(다른 함수의 인자로 전달 될 때)에서는 일반 함수보다 빠르다(인라인 치환)
    • 상태를 가지는 함수( 멤버 데이터가 있고, 멤버 함수를 활용 가능)
struct Plus
{
    int operator()(int a, int b)
    {
        return a + b;
    }
};

int main()
{
    Plus p;
    int n = p(1, 2); // 함수 처럼 사용

    std::cout << n << std::endl; // p.operator()(1,2)
}

///////////////////////////////////////////////////////
// 모든 데이터 타입 지원을 위한 템플릿 적용 버전
template<typename T>
struct Plus
{
    T operator()(T a, T b)
    {
        return a + b;
    }
};

int main()
{
    Plus<int> p;
    int n = p(1, 2); // 함수 처럼 사용

    std::cout << n << std::endl; // p.operator()(1,2)
}

C++ 표준 함수 객체

  • <functional> 헤더
  • 이미 plus, minus, module, less, greater 등 다양하게 제공
  • C++ 레퍼런스 사이트 참고(http://www.cppreference.com)
#include <iostream>
#include <functional>

int main()
{
    std::plus<int> p;
    int n = p(1, 2); // 함수 처럼 사용
}

 

반응형

+ Recent posts