책 정리/More Exceptional C++
항목 5 : typename ( 난이도 : 7 )
최익필
2008. 12. 22. 17:07
이번 항목은 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 이다.
다음 예제코드를 보고 확실히 익히자.
총평
음!