>백엔드 개발 >C++ >C 템플릿에서 'typename' 키워드는 언제 필요합니까?

C 템플릿에서 'typename' 키워드는 언제 필요합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 01:03:10624검색

When is the

"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에는 값, 유형, 템플릿이라는 세 가지 범주의 엔터티가 있습니다. 이들 각각은 이름을 가질 수 있지만 이름 자체는 해당 엔터티가 어떤 범주에 속하는지 나타내지 않습니다. 따라서 컴파일러는 컨텍스트에서 항목 카테고리를 추론해야 합니다.

컴파일러가 카테고리를 추론할 수 없는 경우 적절한 키워드를 사용하여 카테고리를 명시적으로 지정해야 합니다.

  • " typename":은 템플릿 내의 유형을 지정합니다.
  • "template":은 템플릿을 지정합니다. 템플릿 내
  • "value": 템플릿 내의 값을 지정합니다(예제에는 명시적으로 표시되지 않음)

제공된 코드에서 중첩된 이름 "벡터

" 템플릿 클래스 내의 유형입니다. 그러나 컴파일 타임에는 형식 매개 변수 "K"를 알 수 없기 때문에 컴파일러는 이를 추론할 수 없습니다. 따라서 "typename" 키워드는 "벡터

"를 명시적으로 지정하는 데 필요합니다. 유형입니다.

"typename"을 지정해야 하는 다른 경우는 다음과 같습니다.

  • 클래스 내에서 템플릿 별칭을 선언하는 경우
  • 생성자 또는 소멸자를 정의하는 경우 중첩형의 경우
  • 중첩형의 멤버 함수에 접근할 때 type
  • 타입을 템플릿 인수로 사용하는 경우

위 내용은 C 템플릿에서 'typename' 키워드는 언제 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.