이번 항목은 typename 에 대해서다, 그냥 알고만 있어도 바로 써먹을 수 있으니, 빠르게 정리하고 넘어가도록 한다.
1. typename의 역활은 무엇인가?
① typename은 템플릿 매개변수의 이름을 정할 때, 사용 된다.
② typename은 템플릿 매개변수로 인한 의존적인 타입을 타입으로 사용할 때, 사용 된다.
① 은 쉽게 이해 하겠지만, ②은 가물 가물 할것이다. 질문 2에서 예제와 함게 설명 한다.
2. 아래 코드의 문제점은 무엇인가?
... MSVC 2005 에선 문제가 없다. 표준을 따른다는 전제하에서 이야기를 하자면, operator() 의 매개변수 instantaited_type가 정확하게 추론을 할 수 없게 된다.
그 이유는 instantaited_type의 이름이 X_base<B>에 의존적이기 때문에, X_base<B>을 알기 전까진 모호성이 생긴다.모호성은 다음과 같다.
- instantaited_type 가 static 멤버 변수 일 수 있다.
- instantaited_type 가 함수 일 수 있다.
- instantaited_type 가 타입일 수 있다.
이 모호성은 어떻게 해결 하는가?
특정 키워드를 이용하여, 컴파일러에게 말해 주면된다. 그 키워드가 바로 typename 이다.
다음 예제코드를 보고 확실히 익히자.
총평
음!
'책 정리 > More Exceptional C++' 카테고리의 다른 글
항목 10 : 템플릿 특화(specialization)과 오버로딩(overloading) ( 난이도 : 6 ) (0) | 2008.12.23 |
---|---|
항목 9 : 똑같은 코드? ( 난이도 : 5 ) (0) | 2008.12.23 |
항목 8 : set과 map 사용하기 ( 난이도 : 5 ) (0) | 2008.12.22 |
항목 7 : vector와 deque 사용하기 ( 난이도 : 3 ) (0) | 2008.12.22 |
항목 6 : 컨테이너, 포인터 그리고 컨테이너가 아닌 컨테이너 (0) | 2008.12.22 |
항목 4 : 확장 가능한 템플릿 : 상속을 통해서 아니면 특성(traits) 클래스를 통해서? ( 난이도 : 7 ) (0) | 2008.12.22 |
항목 3 : 판단자(predicate) Part 2 : 상태와 판단자 ( 난이도 : 7 ) (0) | 2008.12.20 |
항목 2 : 판단자(predicate) Part 1 : remove()가 삭제 하는 것은? (난이도 : 4 ) (0) | 2008.12.19 |
항목 1 : 스트림 전환(Switching Streams) ( 난이도 : 2 ) (0) | 2008.12.19 |
항목 16 : 최적화 미루기 Part 4 : 멀티쓰레드 환경 (0) | 2008.12.18 |
최근댓글