'Developer/Design Patterns'에 해당되는 글 27건

  1. 2014.05.18 함수포인터, 함수객체를 사용한 인라인 치환

 

#include <iostream>

#include <algorithm>   //sort

#include <functional>  //less, greater

 

using namespace std;

 

bool asc_cmp(int a, int b) { return a < b; }

bool dsc_cmp(int a, int b) { return a > b; }

 

void display(int *arr, int len) {

        for(int i=0; i<len; i++) {

               printf("%3d ", arr[i]);

        }

        getchar();

}

 

 

 

int main() {

 

        int arr[10]={1, 3, 5, 7, 9, 2, 4, 6, 8, 10};

        display(arr, 10);

 

        // 함수포인터

        // 장점 : 정책을 변경하여도 sort함수의 기계어 코드는 한개 : 메모리 최적화

        // 단점 : 정책을 인라인 치환을 없음 : 성능 저하

        sort(arr, arr+10, asc_cmp);

        display(arr, 10);

 

        sort(arr, arr+10, dsc_cmp);

        display(arr, 10);

 

 

        // 함수 객체

        // 장점 : 정책이 인라인 치환이 가능 : 성능 최적화

        // 단점 : 정책을 변경한 횟수 만큼 sort 함수의 기계어 코드 생성 : 메모리 사용량 증가

        less<int> l;

        sort(arr, arr+10, l);

        display(arr, 10);

 

        greater<int> g;

        sort(arr, arr+10, g);

        display(arr, 10);

 

        // 함수 포인터는 시그니처가 같으면 모두 같은 타입이지만.

        // 함수 객체는 시그니처가 같더라도 모두 다른 타입이다.

 

        return 0;

}

Posted by No names
,