단위전략은 Mordern Design C++ 책을 공부하며 만나게 된 스킬로
template 사용의 진정한 힘을 보여주는 스킬입니다.
http://www.moderncppdesign.com/
내용은..... 정말 어렵습니다. ㅠ
하지만, 이전 포스팅 을 보시면 아시겠지만 단위전략과 같은 static 타임의 할당을 통하여 시스템 성능을 크게 높일 수 있다고 합니다.
얼마전까지 텔레비젼 칩을 타겟으로 한 3D 엔진 개발에 참여했었는데요,
그때 처음으로 임베디드 기반에서 C++ STL 을 사용해 보았습니다.
STL의 여러 collection과 함께 추상적이고 다형적인 기법들을 임베디드 환경에 사용하면서 하드웨어 기술이 얼마나 발전했는지 느꼈습니다.
그 때 머릿속을 스친 생각이.. 단위 전략과 같은 하드코어적 성능 향상 기술이 필요할까 하는 것이었습니다.
이미 하드웨어가 몇년 전 까지만해도 꿈도 못 꾸었던 연산들을 충분히 감당하는 시대가 왔으니까요.
허나 모르겠습니다. 과연 우리가 사용하는 모바일 기기들이 만족할 만한 성능을 가지고 있는지요,
국내의 스마트 모바일 기기만 해도 해외의 유명 기기 이상의 스펙을 가지고 있으나, 그 성능을 충분히 살리고 있지 못하다는
아쉬운 쓴소리들이 여기저기 들리고 있습니다.
개발자는 어떤 상황에서든 만약의 경우를 생각해야 하고 또, 보다 효율적인 개발에 욕심을 내야 한다는 생각이 드네요.
여튼..............
어쩌다보니 말이 길어졌네요
^^;;;;; ㅋㅋ
다음 소스는 단위전략을 사용한
자료형 크기에 따른 Sort를 구현해 본것 입니다.
단위전략을 처음 공부할 때 구현해볼 만한 좋은 예라고 생각합니다.
1#include <iostream>
2#include "c:\LOKI\include\loki\Typelist.h"
3
4using namespace Loki;
5
6//Type의 사이즈를 리턴하는 struct.
7template<class T>
8struct Type2Size
9...{
10 enum ...{Size=sizeof(T) };
11};
12
13//두번째 루프. 뒤부터 탐색해서 Minimum값을 추출하는 Min struct.
14//타입값이 나오면 연산하는 struct Min.
15template<class H, class T>
16struct Min
17...{
18 enum ...{ value = (Type2Size<H>::Size) > (Type2Size<T>::Size) };
19 typedef typename Select<value , T, H >::Result Result;
20
21};
22//template<class P,class T>struct Min;
23
24//맨 뒤까지 재귀하는 struct Min.
25template<class P,class H,class T >
26struct Min< P,Typelist<H,T> >
27...{
28 typedef typename Min<P,typename Min<H,T>::Result >::Result Result;
29};
30
31//Null 처리 struct Min.
32template<class P>
33struct Min< P,NullType >
34...{
35 typedef P Result;
36};
37
38
39template<class TList > struct SortList;
40/**//********************************************************************************/
41//첫번째 루프. 조건 Length L.
42template<class H, class T >
43struct SortList <Typelist<H,T> >
44...{
45private:
46 typedef typename Min<H,T >::Result Minimum;
47
48 typedef typename TL::Replace<T,Minimum,H>::Result SortedResult;
49
50 typedef typename SortList<SortedResult>::Result L1;
51 // typedef Typelist<Minimum,SortList<L,SortedResult> > Result;
52
53public:
54 typedef Typelist<Minimum,L1> Result;
55
56
57};
58
59/**//********************************************************************************/
60template<>
61struct SortList <NullType >
62...{
63 typedef NullType Result;
64};
65
66
67//확인용 Print함수
68
69template <typename T>
70void Print(T a)
71...{
72 return;
73}
74template <typename H, typename T>
75void Print(Typelist<H,T> a)
76...{
77
78 std::cout << sizeof(H) << std::endl;
79 Print(T());
80}
81
82
83int main()...{
84 SortList<
85 LOKI_TYPELIST_6(float,double,char,long,short,bool) >::Result a;
86 Print(a);
87 return 0;
88
89}
90
'Programming Language > C++' 카테고리의 다른 글
[D.P] SingleTon (0) | 2011.09.07 |
---|---|
[C Interprinter] Scanner class (0) | 2011.09.07 |
[단위전략] Clone()에서 Typelist까지... (0) | 2010.11.04 |