>백엔드 개발 >C++ >C에서 템플릿 기반 클래스의 공개 멤버에 어떻게 액세스할 수 있습니까?

C에서 템플릿 기반 클래스의 공개 멤버에 어떻게 액세스할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-01 15:12:31191검색

How Can You Access Public Members of a Templated Base Class in C  ?

템플릿 클래스 상속의 공개 멤버 비가시성

다음 C 코드를 고려하세요.

<code class="cpp">class CBase {
public:
    char Arr[32];
    int Fn1();
    int Fn2();
};

class CDerived : public CBase {
public:
    int FnSum();
};</code>

이 코드에서, CDerived는 CBase의 공개 멤버를 상속합니다. 그러나 이 코드가 템플릿화되어 Arr 및 함수가 템플릿화되면 CBase의 공개 멤버가 CDerived에 표시되지 않게 됩니다.

솔루션

이 문제를 해결하기 위해 여러 가지 방법을 사용합니다. 솔루션 존재:

  • 솔루션 #1: CBase 멤버에 대한 모든 참조 앞에 CBase::를 붙입니다. 여기서 BYTES는 템플릿 매개변수입니다.
  • 해결책 #2: CBase 멤버에 대한 모든 참조 앞에 this->를 붙입니다.
  • 해결책 #3: CDerived의 using 문을 사용하여 필요한 모든 CBase 멤버를 선언합니다. .

솔루션 문제

솔루션 #1과 #2는 코드에 장황한 추가가 필요하므로 소스가 너무 커지고 반복됩니다. 엄격한 준수를 비활성화하는 솔루션 #4는 이식성이 없으며 C 표준에서 벗어났습니다.

향상된 솔루션

코드를 단순화하려면 매크로를 사용하여 자동화할 수 있습니다. 솔루션 #3의 using 문 추가:

<code class="cpp">#define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5)

// In CDerived<BYTES>, in a `public:` section
USING_CBASE(BYTES);</code>

이 매크로는 CDerived에서 사용되는 CBase의 모든 멤버에 대해 필요한 using 문을 자동으로 생성합니다.

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

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