#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;
}
'Developer > Design Patterns' 카테고리의 다른 글
Proxy Pattern을 이용한 스마트포인터 방식 (0) | 2014.05.18 |
---|---|
참조계수 방식의 스마트 포인터 (0) | 2014.05.18 |
Factory Pattern을 이용한 도형 만들기 (0) | 2014.05.17 |
컴포지트 패턴을 이용한 메뉴구성 (0) | 2014.05.17 |
템플릿 상속을 이용한 싱글톤 패턴 (0) | 2014.05.17 |