템플릿. 학생 때나 회사 다닐 때나 참 요물입니다, 이 녀석. 창피한 얘기지만 아직도 잘 모르겠어요. 그래서 공부할 겸, 정보 공유도 할 겸 포스팅으로 스터디 자료를 대체합니다.
항목 41: 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성 부터..
이게 도대체 뭔 소리냐.. 뭐 컨셉 자체는 심플합니다. 클래스와 비교를 하는 것이 이해가 빠를테니 클래스를 먼저 보지요.
class Widget |
예시를 보면, Widget 이라는 클래스는 일종의 타입이며, 이 타입으로 선언/정의된 클래스는 명시되어 있는 인터페이스만 사용이 가능합니다. 이 인터페이스는 명시적으로 등록되는 것이죠. 그래서 명시적 인터페이스 라고 한답니다. 또, 중간중간 보이는 virtual keyword로 이 클래스는 하위 클래스 들의 함수를 프로그램이 수행되는 런타임 시점에 바인딩이 가능합니다. 이를 런타임에 모양이 바뀐다 하여 런타임 다형성 이라고 한답니다. (햇깔리지마세요. 클래스 이야기입니다.)
그럼 다시 템플릿으로 돌아오죠. 예제를 들여다 보면 됩니다.
template <typename T> |
template<class T> class Widget; |
두 가지 의미는 완전히 동일하답니다. 뭐, 이건 설명 안하고 넘어가도 되겠죠? 모르시면 우리의 국민 사이트 http://www.winapi.co.kr 방문하셔서 한번 둘러보세요~
활용 2) 타입이 모호할 때 이것이 타입이다 알려줄 때의 활용
template <typename C> |
template <typename C> |
이제서야 컴파일러는 x라는 변수를 C::const_iterator* 에 맞게 설정할 수 있겠네요.
위와 같은 상황의 변수타입을 중첩 의존 타입 이라고 한답니다. C 라는 미지의 타입 내부에 변수/타입/함수 등이 무엇인지 애매한 타입을 말하는데요. 이 경우 typename을 활용하여 컴파일러에게 “이것은 타입이다!” 라고 강하게 어필할 수 있는 도구이죠. 여기까지 typename의 두 번째 활용이었습니다. (책에는 사용하지 말아야 할 경우까지 설명되어 있지만 skip합니다. 논리적으로 생각해보면 당연한 이야기인듯 하니까요)
'old_Coding > C/C++' 카테고리의 다른 글
[C/C++] 문자열 다루기(1) - 초기화 (0) | 2010.12.13 |
---|---|
[STL::Map] Error occured(*) (0) | 2010.03.18 |
[C] File I/O (0) | 2010.03.11 |
[Scrap] Struct SYSTEM_INFO (*) (0) | 2010.01.04 |
[C++] Function Pointer(3) (Solution) (0) | 2009.12.27 |