상속된 클래스 템플릿을 사용하여 멤버 숨김 및 소스 코드 과대화 방지
클래스 템플릿 CDerived가 기본에서 상속할 때 발생하는 문제가 발생합니다. 클래스 템플릿, CBase 및 CBase의 모든 공용 멤버는 표준 C 규격을 활성화하여 코드를 컴파일하면 CDerived에 표시되지 않습니다.
문제 해결 방법:
해결책 #1: 명시적 한정
CBase
해결책 #2: this-> 접두사
CBase 멤버에 대한 참조 접두사에 this->가 붙습니다. 예를 들어 Fn1()은 this->Fn1()이 됩니다. 이렇게 하면 멤버도 표시되지만 다시 자세한 코드 변경이 필요합니다.
해결책 #3: 문 사용
CBase 멤버를 가져오려면 CDerived 내부에 using 문을 추가하세요. 예: CBase
해결책 #4: 비표준 허용 모드
이름 조회 문제를 억제하려면 컴파일러 설정에서 엄격한 C 규칙을 비활성화합니다. 그러나 이는 표준에서 벗어난 글로벌 솔루션이며 이식성이 없습니다.
더 간결한 솔루션 #5:
솔루션의 장황함을 줄이기 위해 # 3, 매크로를 사용하여 필요한 using 문을 생성할 수 있습니다.
구현:
Boost 전처리기 라이브러리를 포함하고 USING_ONE 매크로를 정의하여 단일 using 문을 생성합니다. 특정 기본 멤버에 대한 문.
지정된 모든 기본 멤버에 대한 using 문 시퀀스를 생성하려면 또 다른 매크로 USING_ALL을 정의합니다.
기본 클래스 템플릿에서 USING_CBASE 매크로를 정의합니다. 파생 클래스 템플릿에서 사용될 모든 보호 및 공용 멤버에 대한 using 문을 생성합니다.
파생 클래스 템플릿 내에서 적절한 USING_CBASE 매크로를 사용하여 앞서 정의한 매크로를 사용하여 필요한 멤버를 가져옵니다. 이 프로세스에는 최소한의 검색 및 입력이 필요하므로 이식성을 유지하면서 소스 코드의 팽창을 줄입니다.
위 내용은 상속된 클래스 템플릿에서 멤버 비가시성 및 소스 코드 팽창을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!