Bagaimana untuk Nyahkekaburan Ahli Kelas dalam Berbilang Warisan dengan Set Jenis Tidak Bertindih?

Barbara Streisand
Lepaskan: 2024-10-25 01:11:02
asal
159 orang telah melayarinya

How to Disambiguate Class Members in Multiple Inheritance with Non-Overlapping Sets of Types?

Nyahkekaburan Ahli Kelas dalam Berbilang Warisan dengan Set Jenis Tidak Bertindih

Cabaran timbul apabila mewarisi daripada pelbagai pangkalan dengan set tidak bertindih daripada jenis. Apabila memanggil fungsi ahli, pengkompil menjangkakan untuk mengenal pasti kelas asas tertentu untuk digunakan, tetapi dalam kes sedemikian, ia menghadapi kekaburan.

Semasa templat Contains menentukan sama ada jenis wujud dalam pek variadic, peraturan gabungan untuk carian ahli kelas dalam kes di mana set pengisytiharan kelas yang diperolehi kosong boleh mengakibatkan kekaburan. Memandangkan kedua-dua kelas asas tidak mempunyai ahli dalam set pengisytiharan kelas terbitan, proses cantuman menggabungkan set carian daripada setiap pangkalan, membawa kepada panggilan samar-samar.

Penyelesaian Kemungkinan

  • Pengisytiharan Menggunakan Eksplisit: Dengan menambahkan pengisytiharan penggunaan eksplisit untuk setiap fungsi ahli kelas asas, kelas terbitan mentakrifkan ahli tersebut dengan berkesan, menjadikan set pengisytiharannya tidak kosong dan memintas peraturan cantum yang tidak jelas.

    <code class="cpp">struct Derived : public Base<int, char>, public Base<double, void>
    {
      using Base<int, char>::foo;
      using Base<double, void>::foo;
    };</code>
    Salin selepas log masuk
  • Base Collector: Menggunakan teknik metaprogramming templat, laksanakan kelas BaseCollector yang mengumpul ahli semua kelas asas dan mengisytiharkannya menggunakan dalam kelas terbitan . Pendekatan ini menyediakan penyelesaian generik tanpa memerlukan pengisytiharan penggunaan eksplisit.

    <code class="cpp">struct Derived : BaseCollector<Base2<int>, Base2<std::string>>
    { };</code>
    Salin selepas log masuk
  • Peluasan Pek Variadik Menggunakan Pengisytiharan (C 17): Penggunaan pengembangan pek variadic boleh memudahkan pelaksanaan BaseCollector, menjadikannya lebih pendek dan lebih cekap.

    <code class="cpp">template <typename... Bases>
    struct BaseCollector : Bases...
    {
      using Bases::foo...;
    };</code>
    Salin selepas log masuk

    Dengan menggunakan teknik ini, kami boleh menyahkekaburan panggilan ahli kelas dalam berbilang senario warisan dengan set jenis yang tidak bertindih, membolehkan untuk jelas dan jelas. pelaksanaan kod.

Atas ialah kandungan terperinci Bagaimana untuk Nyahkekaburan Ahli Kelas dalam Berbilang Warisan dengan Set Jenis Tidak Bertindih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!