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 클래스는 정의된 NO_ZEROFILL 식별자에 액세스할 수 없습니다. 기본 클래스에서. 이 동작은 C의 2단계 조회 메커니즘으로 인해 발생합니다.
템플릿 확장 중에 기본 클래스 템플릿은 T에 대한 특정 유형으로 인스턴스화됩니다. 이 경우 컴파일러는 T의 실제 유형을 알지 못합니다. T 템플릿이 사용될 때까지. 따라서 NO_ZEROFILL과 같이 T에 의존하는 기본 클래스의 식별자를 확인할 수 없습니다.
이 문제를 해결하려면 해당 식별자에 액세스할 때 기본 클래스 템플릿을 명시적으로 지정해야 합니다. 예를 들어 단순히 NO_ZEROFILL 대신 Derived
이 명시적 기본 클래스 템플릿 사양은 컴파일러에게 Derived
위 내용은 파생된 템플릿 클래스가 기본 템플릿 클래스 식별자에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!