템플릿 기반 C 클래스에서 보호 및 공용 클래스 멤버 가시성 상속
클래스 템플릿이 상속할 때 상속에서 공용 멤버 가시성 문제가 명백해집니다. 제공된 코드에 예시된 것처럼 다른 클래스 템플릿의 멤버입니다. 공개 멤버를 명시적으로 다시 선언하거나 재정의하지 않고 CDerived는 CBase의 모든 공개 멤버를 상속합니다.
문제 및 솔루션
그러나 이 코드를 템플릿하면 CBase의 공개 멤버가 드러납니다. 최신 C 표준을 준수하는 컴파일러에서는 CDerived에 표시되지 않습니다. 이 가시성 문제는 여러 솔루션을 사용하여 해결할 수 있습니다.
기존 솔루션의 단점
이 솔루션은 효과적이지만 단점도 있습니다.
간소한 장황한 솔루션
매크로를 도입하면 솔루션 #3이 단순화되어 반복 입력이 줄어듭니다.
<code class="cpp">#include <boost/preprocessor.hpp> #define USING_ONE(r, base, member) using base::member; #define USING_ALL(base, ...) BOOST_PP_SEQ_FOR_EACH(USING_ONE, base, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) // Near CBase<BYTES> #define USING_CBASE(param) USING_ALL(CBase<param>, Arr, Fn1, Fn2, Fn3, Fn4, Fn5) // In CDerived<BYTES> USING_CBASE(BYTES);</code>
이 코드는 using 문을 크게 단순화하여 코드 가독성을 높이고 반복 편집을 줄입니다.
위 내용은 템플릿 기반 C 클래스를 상속할 때 공개 클래스 멤버가 보이지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!