[C++] 함수객체 기본 예제

2019. 7. 30. 00:08 기타/C++

[C++] 함수객체 기본 예제


함수 객체(Function Object)는 함수처럼 동작하는 객체이다.

함수처럼 동작하려면 객체가 operator() 를 정의해야 한다.


아래의 예제를 보면 구조체에서 operator() 연산자를 오버라이딩 하고, main에서 해당 구조체를 선언한 후 함수처럼 호출하였다.


#include <iostream>
#include <algorithm>
using namespace std;

struct Functor1{
    void operator()(int n){
        cout << n << endl;
    }
};

struct Functor2{
    void operator()(int n){
        cout << n*n << endl;
    }
};

struct Functor3{
    void operator()(int n){
        cout << "정수 : " << n << endl;
    }
};

int main(){

    int arr[5] = { 10, 20, 30, 40, 50 };

    Functor1 functor1;
    functor1(3);
    cout << endl;

    for_each(arr, arr + 5, Functor1());
    cout << endl;

    for_each(arr, arr + 5, Functor2());
    cout << endl;

    for_each(arr, arr + 5, Functor3());

    return 0;
}


결과 :


3


10

20

30

40

50


100

400

900

1600

2500


정수 : 10

정수 : 20

정수 : 30

정수 : 40

정수 : 50




* 함수 객체의 장점


함수 객체는 함수처럼 동작하는 객체이므로 다른 멤버 변수와 멤버 함수를 가질 수 있고 일반 함수에서 하지 못하는 지원을 받을 수 있다.

또한, 함수 객체의 서명이 같더라도 객체 타입이 다르면 서로 전혀 다른 타입으로 인식한다.

속도도 일반 함수보다 함수 객체가 빠르다. 함수의 주소를 전달하여 콜백할 경우 이 함수 포인터는 인라인 될 수 없지만 (함수 포인터는 함수가 있어야 하므로 인라인 함수의 복사본 함수를 만들어 낸다.) 함수 객체는 인라인 될 수 있고, 컴파일러가 쉽게 최적화 할 수 있다.



출처: https://hyeonstorage.tistory.com/314?category=601868 [개발이 하고 싶어요]