"typename" 키워드는 언제 필수인가요? [중복]
다음 코드를 고려하세요.
template<class K> class C { struct P {}; vector<P> vec; void f(); }; template<class K> void C<K>::f() { typename vector<P>::iterator p = vec.begin(); }
이 예에서 "typename" 키워드가 필요한 이유는 무엇입니까?
답변:
"typename" 키워드는 내부에 중첩된 이름을 참조할 때마다 필요합니다. 컴파일 타임에 중첩된 이름의 유형을 알 수 없는 템플릿 클래스 또는 함수. 이를 "종속 이름"이라고 합니다.
C에는 값, 유형, 템플릿이라는 세 가지 범주의 엔터티가 있습니다. 이들 각각은 이름을 가질 수 있지만 이름 자체는 해당 엔터티가 어떤 범주에 속하는지 나타내지 않습니다. 따라서 컴파일러는 컨텍스트에서 항목 카테고리를 추론해야 합니다.
컴파일러가 카테고리를 추론할 수 없는 경우 적절한 키워드를 사용하여 카테고리를 명시적으로 지정해야 합니다.
제공된 코드에서 중첩된 이름 "벡터
" 템플릿 클래스 내의 유형입니다. 그러나 컴파일 타임에는 형식 매개 변수 "K"를 알 수 없기 때문에 컴파일러는 이를 추론할 수 없습니다. 따라서 "typename" 키워드는 "벡터
"를 명시적으로 지정하는 데 필요합니다. 유형입니다.
"typename"을 지정해야 하는 다른 경우는 다음과 같습니다.
위 내용은 C 템플릿에서 'typename' 키워드는 언제 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!