Programming Language/C++2010. 11. 4. 18:03

 단위전략은 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
Posted by BLUE-NOTE