Ordinary Life/Daily Log2009/04/13 13:00


다들 세계 인명사전에 오르신 분들은 대단하다고 느꼈는데.
(기사도 엄청 때리고 인물검색에도 오르죠.)
작년에 제가 등재되면서 그런 몽상들은 다 쓸데 없는 것이라고 느꼈습니다.

작년에 소개한바 있는 세계 3대 인명사전.
마르퀴즈 후즈 후 (Marquis Who's Who),국제 인명 센터(IBC; International Biograpical Centre)와 미국 인명 정보기관 (ABI; American Biographical Institute)

모두 대단한 기관임은 틀림없지만..





이번 2010년에는 마르퀴즈 후즈후 2010과 국제 인명 센터 저명 지식인 2000人 의 후보에 선정되어 관련 레터가 날라왔네요.

얘들 저한테 왜 이럴까요. 
나는 유명하거나 저명하지 않다고.!



저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Creatinova



Ordinary Life/Mobile Log2009/04/13 07:25



안그래도 출근하기 귀찮은 월요일인데 날씨도 꿀꿀하고 차까지 엄청막히네요. 이번주 험난한 한주가 예상되는 가운데 힘날일이 하나도 없어 우울하네요.




힘내야하는데..
신이시여 저에게 힘을 주세요-!


현재 게시글은 Creatinova님의 Xperia X1으로 작성되었습니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Creatinova



Development/C++2009/04/11 21:21


자주 쓰지는 않지만 기존 작성된 템플릿 클래스를 Wrapping 하다보면 (특히 리스트!) 템플릿 클래스를 사용해야 하는 경우가 많습니다.

하지만 이것 저것 작성하다 보면 템플릿 클래스의 헤더가 복잡해지는 경우가 많은데요.

이는 템플릿 클래스(Template Class)의 멤버함수는 헤더에 정의해야만 하기 떄문입니다
. MFC나 STL에서 디버깅을 하다가 만나는 템플릿 클래스의 헤더들을 보면 구현부가 노출되어 있죠.
(Cpp 파일에 따로 멤버 함수를 정의하면 VC는 링크 오류를 발생시킵니다. <아마도 LNK2014 일 듯 합니다.> export 키워드로 명시적으로 표현할 수 있지만 VC 컴파일러는 이를 인식하지 못합니다.)

한두줄로 구현되는 함수들이야 헤더에 넣어도 문제없겠지만 복잡한 구현부를 가진 함수나, 다수의 함수를 구현하는 경우에는 헤더가 지저분해지기 쉽상입니다.

그래서 많은 분들이 쓰시는 방법은 인라인 함수(inline function) 인데요.
다음과 같이 구현하면 선언부와 구현부를 분리할 수 있어 가독성이 상당히 좋고 헤더도 깔끔해져서 이런 방법으로 구현하곤 합니다.

(1) 기존방법 :

MyTemplateClass.h

template<class T, int size>
class MyTemplateClass
{
public :
MyTemplateClass() { miTotalCount = 0; };
~MyTemplateClass() {};

void Set (T oItem, int index) { moArray[index] = oItem;};
T Get(int index) { return moArray[index]; }
private :
int  miTotalCount;
T   moArray[size];
}

 
(2) 인라인 함수 사용방법 :

MyTemplateClass.h

template<class T, int size>
class MyTemplateClass
{
public :
MyTemplateClass() {};
~MyTemplateClass() {};

void Set (T oItem, int index) {};
T Get(int index) {}
private :
int  miTotalCount;
T   moArray[size];
}

#include " MyTemplateClass.inl"


---------------------------------------------------------------------

MyTemplateClass.inl


template<class T, int size>
inline MyTemplateClass<T, size>::MyTemplateClass()
{
miTotalCount = 0;
}

template<class T, int size>
inline void MyTemplateClass<T, size>::~MyTemplateClass()
{
}

template<class T, int size>
inline void MyTemplateClass<T, size>::Set(T oItem, int index)
{
moArray[index] = oItem;
}

template<class T, int size>
inline T MyTemplateClass<T, size>::Get()
{
return moArray[index];
}

 
이렇게 헤더에서 인라인 구현함수 파일(MyTemplateClass.inl)을 포함(include)하게 되면 정의파일과 구현파일로 따로 분리할 수도 있습니다.

함수가 간단해서 후자의 방법이 더 복잡해 보이지만 복잡한 클래스의 경우 이렇게 작성하면 헤더도 간소해지고 가독성도 높아지리라 생각합니다.

* 컴파일을 안돌려봐서 잘 돌아갈지 모르겠네요 ^^;



저작자 표시 비영리 변경 금지
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Creatinova



Ordinary Life/Mobile Log2009/04/08 18:14




요즘 개발중인 DVR 입니다.
임베디드 단어를 안다는 이유로 두달전 부터 씨름 중입니다.

다행히 운 좋게도 많이 안정화되서 러닝 테스트 중입니다. ^^;

좀 여유가 되고보니, 잊고있던 엑스페리아가 생각이 났습니다.
수신율과 배터리 충전기 문제로 일주일만에 교품받았는데 그래도 워낙 명기다 보니 녀석을 볼때마다 흐뭇해지네요

퇴근 시간이 한 시간이 지났는데도 집에 못가고 있습니다.
마지막으로 모블로깅 테스트 중인데 잘되려나 모르겠네요 ^^


현재 게시글은 Creatinova님의 Xperia X1으로 작성되었습니다.


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Creatinova