템플릿 기반 상위 클래스에서 상속된 변수에 액세스
제공된 코드 조각은 상속된 클래스 Bar가 해당 클래스의 보호된 변수에 액세스하려고 시도하는 시나리오를 보여줍니다. 템플릿 클래스인 상위 클래스 Foo입니다. 그러나 컴파일러는 오류를 생성하여 컴파일러가 표준을 준수하는지 여부에 대한 혼란을 야기합니다.
C 표준에 따르면 템플릿 내의 정규화되지 않은 이름은 비종속적인 것으로 간주되며 템플릿을 정의할 때 해결해야 합니다. . 템플릿 정의 중에 특수 기본 클래스 템플릿을 사용할 수 없기 때문에 확인되지 않은 정규화되지 않은 이름으로 인해 오류가 발생합니다.
이는 Bar가 액세스할 수 있는 예에서 볼 수 있듯이 기본 클래스에 선언된 변수와 함수 모두에 적용됩니다. 정규화된 이름을 사용하거나 선언을 사용합니다. 후자는 파생 클래스 내에서 비정규 액세스를 허용하여 초기 오류를 해결합니다.
예를 들어 다음 코드 수정으로 문제가 해결됩니다.
template<class T> int Bar<T>::Perna(int u) { int c = Foo<T>::a * 4; // Qualified name c = this->a * 4; // Pointer to own instance using Foo<T>::a; c = a * 4; // Using declaration }
조회 규칙을 명확하게 하고 대체 솔루션을 제공합니다. , 이 설명은 템플릿 확인의 미묘한 차이를 강조하고 개발자가 컴파일러 동작의 근거를 이해하는 데 도움이 됩니다.
위 내용은 상속된 클래스가 C의 템플릿 부모 클래스에 있는 보호 변수에 어떻게 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!