파생 템플릿 클래스가 기본 템플릿 클래스 식별자에 대한 액세스 권한을 상실하는 이유
C에서 파생 템플릿 클래스는 식별자에 직접 액세스하지 못할 수 있습니다. 기본 템플릿 클래스의 2단계 조회라고 알려진 이 동작은 C 사양에 의해 시행됩니다.
다음 코드 조각을 고려하세요.
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(); }
이 예에서 파생 클래스 Derived는 기본 클래스 Base의 NO_ZEROFILL 식별자입니다. 이는 템플릿 정의 단계 동안 컴파일러가 T를 대체하는 실제 유형을 갖고 있지 않기 때문입니다. 따라서 Base
이 동작을 통해 클래스가 다른 유형으로 인스턴스화되는 경우에도 템플릿 클래스의 식별자 의미가 잘 정의됩니다. Base
제공된 코드의 문제를 해결하려면, 아래와 같이 기본 클래스 이름으로 NO_ZEROFILL 식별자를 명시적으로 한정할 수 있습니다.
Derived( bool initZero = Base<T>::NO_ZEROFILL );
위 내용은 파생된 템플릿 클래스가 기본 템플릿 클래스 식별자에 직접 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!