파생 템플릿 클래스의 기본 템플릿 클래스 식별자 가시성
다음 코드 조각을 고려하세요.
template<typename T> class Base { public: static const bool ZEROFILL = true; static const bool NO_ZEROFILL = false; }; template<typename T> class Derived : public Base<T> { public: Derived(bool initZero = NO_ZEROFILL); // NO_ZEROFILL is not visible ~Derived(); };
GCC g 3.4.4(cygwin)로 컴파일하면 이 코드 컴파일이 실패합니다. NO_ZEROFILL은 Derived 템플릿 클래스에 표시되지 않습니다. 이 동작은 C의 2단계 조회로 인해 발생할 수 있습니다.
C의 2단계 조회
컴파일러가 템플릿 선언을 발견하면 예비 단계만 수행합니다. 해당 템플릿 내에서 사용되는 식별자를 검색합니다. T의 실제 유형은 이 단계에서 결정되지 않으므로 컴파일러는 Base
2단계 조회 프로세스:
이 경우 NO_ZEROFILL은 알 수 없는 유형 T에 따라 달라지므로 예비 조회 중에 표시되지 않습니다. 결과적으로 파생 클래스에서 Base
위 내용은 파생 클래스에서 기본 템플릿 클래스의 정적 멤버에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!