C에서는 a를 참조할 때 "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(); }
벡터
::iterator라는 이름은 템플릿 매개변수 K에 의존하기 때문에 종속적인 이름입니다. 컴파일 타임에 컴파일러는 값을 알지 못합니다. 따라서 이름 벡터
::iterator를 완전히 확인할 수 없습니다.
"typename" 키워드는 컴파일러에게 이름이 벡터P::iterator는 컴파일 타임에 완전히 해석될 수 없더라도 유형 이름입니다. 이는 올바른 코드를 생성하기 위해 컴파일러가 변수 p의 유형을 알아야 하기 때문에 필요합니다.
다음과 같은 중첩 유형을 참조하는 경우와 같이 "typename"을 지정해야 하는 다른 경우도 있습니다. 템플릿 클래스 내부에 선언되었습니다. 예를 들어 다음 코드에서는
template<class T> struct A { typedef typename T::type my_type; };
typename T::type이라는 이름은 템플릿 클래스 A 내부에 선언된 중첩 유형 이름입니다. 컴파일 타임에 컴파일러는 유형을 알지 못합니다. T이므로 이름 typename T::type을 완전히 확인할 수 없습니다.
"typename" 키워드는 typename T::type이라는 이름이 유형 이름이라는 것을 컴파일러에 알리는 데 사용됩니다. 하지만 컴파일 타임에 완전히 해결될 수는 없습니다. 이는 올바른 코드를 생성하기 위해 컴파일러가 변수 my_type의 유형을 알아야 하기 때문에 필요합니다.
위 내용은 C `typename` 키워드는 언제 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!