Nyahkekaburan Ahli Kelas dalam Berbilang Warisan dengan Set Bertindih
Dalam C , berbilang warisan dengan set jenis yang bertindih boleh menyebabkan kekaburan semasa membuat panggilan fungsi ahli dengan parameter templat. Untuk memahami sebabnya, mari kita periksa templat kelas asas:
<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"; } };
Ahli foo() hanya boleh dipanggil apabila parameter templat yang ditentukan terdapat dalam senarai parameter templat Base. Sekarang, katakan kita mentakrifkan kelas terbitan Terbitan yang mewarisi daripada berbilang contoh Base dengan set jenis tidak bertindih:
<code class="cpp">struct Derived: public Base<int, char>, public Base<double, void> {};</code>
Apabila memanggil Derived().foo
Penyelesaian Kemungkinan
<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>
Pendekatan ini membolehkan kelas terbitan mengakses pelaksanaan kelas asas yang betul tanpa perlu menggunakan pengisytiharan atau spesifikasi kelas asas secara eksplisit.
Memahami kesamaran dan melaksanakan penyelesaian berkesan dalam berbilang warisan dengan set bertindih membantu memastikan pelaksanaan kod yang jelas dan betul.
Atas ialah kandungan terperinci ## Bagaimana untuk Nyahkekaburan Panggilan Ahli Kelas dalam Berbilang Warisan dengan Set Jenis Bertindih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!