Maison >développement back-end >C++ >## Comment lever l'ambiguïté des appels de membres de classe dans un héritage multiple avec des ensembles de types qui se chevauchent ?
Désambiguïsation d'un membre de classe dans un héritage multiple avec des ensembles qui se chevauchent
En C, l'héritage multiple avec des ensembles de types qui se chevauchent peut conduire à une ambiguïté lors de l'appel fonctions membres avec des paramètres de modèle. Pour comprendre pourquoi, examinons un modèle de classe de base :
<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"; } };
Le membre foo() ne peut être appelé que lorsque le paramètre de modèle spécifié est présent dans la liste des paramètres de modèle de Base. Supposons maintenant que nous définissions une classe dérivée Derived qui hérite de plusieurs instances de Base avec des ensembles de types qui ne se chevauchent pas :
<code class="cpp">struct Derived: public Base<int, char>, public Base<double, void> {};</code>
Lors de l'appel de Derived().foo
Solutions possibles
<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>
Cette approche permet à la classe dérivée d'accéder à l'implémentation correcte de la classe de base sans avoir besoin de déclarations explicites d'utilisation ou de spécification de classe de base.
Comprendre l'ambiguïté et la mise en œuvre de solutions efficaces dans l'héritage multiple avec des ensembles qui se chevauchent permet de garantir une exécution de code claire et correcte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!