>백엔드 개발 >C++ >C의 템플릿 부모 클래스에서 상속된 변수에 어떻게 액세스할 수 있습니까?

C의 템플릿 부모 클래스에서 상속된 변수에 어떻게 액세스할 수 있습니까?

DDD
DDD원래의
2024-12-20 10:34:16776검색

How Can I Access Inherited Variables from Templated Parent Classes in C  ?

템플릿 부모 클래스에서 상속된 변수에 액세스

템플릿 부모 클래스의 변수 접근성에 관한 문의에 대한 응답으로 다음을 명확히 하는 것이 중요합니다. 버전 3.4.6부터 시작하는 최신 GNU C 컴파일러는 C 표준을 엄격하게 준수합니다. 이는 템플릿 내의 정규화되지 않은 이름이 항상 비종속적임을 나타냅니다. 결과적으로 템플릿 정의 시 이러한 이름을 확인하는 것은 제공된 코드 조각과 같이 종속 기본 클래스 전문화의 알 수 없는 특성으로 인해 실행 불가능해집니다.

template<class T> class Foo
{
public:
  Foo() { a = 1; }

protected:
  int a;
};

template<class T> class Bar : public Foo<T>
{
public:
  Bar() { b = 4; };

  int Perna(int u);

protected:
  int b;

};

template<class T> int Bar<T>::Perna(int u) 
{ 
  int c = Foo<T>::a * 4; // This works
  return (a + b) * u;    // This doesn't
}

이 동작은 프로세스 중에 정규화되지 않은 이름을 식별해야 하는 요구 사항에서 비롯됩니다. 템플릿 정의는 향후 전문화 가능성으로 인해 종속 기본 클래스에는 불가능합니다. 따라서 'Bar'의 'Perna' 메소드 내에서 규정되지 않은 보호 변수 'a'에 액세스하려고 하면 오류가 발생합니다.

이 제한을 피하려면 규정된 이름 'Foo

using Foo<T>::a;

int c = a * 4; // Now valid

또한 기본 클래스에 선언된 정규화되지 않은 함수 이름에도 이 제한이 적용됩니다. 이러한 기능에 액세스하려면 정규화된 이름을 사용하거나 'using' 선언을 제공해야 합니다.

위 내용은 C의 템플릿 부모 클래스에서 상속된 변수에 어떻게 액세스할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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