겹치는 집합이 있는 다중 상속의 클래스 멤버 명확화
C에서 유형 집합이 겹치는 다중 상속은 호출 시 모호성을 초래할 수 있습니다. 템플릿 매개변수가 있는 멤버 함수. 이유를 이해하기 위해 기본 클래스 템플릿을 살펴보겠습니다.
<code class="cpp">template <typename ... Types> class Base { public: template <typename T> typename std::enable_if<Contains<T, Types ...>::value>::type foo() { std::cout << "Base::foo()\n"; } };
foo() 멤버는 지정된 템플릿 매개변수가 Base의 템플릿 매개변수 목록에 있을 때만 호출할 수 있습니다. 이제, 겹치지 않는 유형 세트를 사용하여 Base의 여러 인스턴스에서 상속하는 파생 클래스 Derived를 정의한다고 가정해 보겠습니다.
<code class="cpp">struct Derived: public Base<int, char>, public Base<double, void> {};</code>
Derived().foo
가능한 해결 방법
<code class="cpp">template <typename... Bases> struct BaseCollector; template <typename Base> struct BaseCollector<Base> : Base { using Base::foo; }; template <typename Base, typename... Bases> struct BaseCollector<Base, Bases...>: Base, BaseCollector<Bases...> { using Base::foo; using BaseCollector<Bases...>::foo; }; struct Derived: public BaseCollector<Base<int, char>, Base<double, void>> {};</code>
이 접근 방식을 사용하면 파생 클래스가 명시적인 사용 선언이나 기본 클래스 사양 없이도 올바른 기본 클래스 구현에 액세스할 수 있습니다.
모호성과 집합이 겹치는 다중 상속에서 효과적인 솔루션을 구현하면 명확하고 올바른 코드 실행이 보장됩니다.
위 내용은 ## 유형 집합이 겹치는 다중 상속에서 클래스 멤버 호출을 명확하게 하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!