Is_Base_Of Trait Implementation
Is_base_of trait menyediakan cara untuk menentukan sama ada satu kelas berasal daripada kelas lain, walaupun dengan kehadiran private atau harta pusaka yang dilindungi. Pelaksanaannya bergantung pada penggunaan bijak templat fungsi dan jujukan penukaran yang ditentukan pengguna.
Cara Ia Berfungsi
Templat is_base_of mengambil dua parameter templat, B dan D, mewakili potensi asas dan kelas terbitan, masing-masing. Ia mentakrifkan dua fungsi ahli statik:
Nilai ahli statik is_base_of ialah kemudian dimulakan menggunakan perbandingan saiz, yang pada asasnya menyemak sama ada saiz hasil pemanggilan semakan dengan Host objek adalah sama dengan saiz hasil "ya" (iaitu, saiz tatasusunan 1).
Warisan Asas Persendirian
Pelaksanaan mampu mengendalikan persendirian pewarisan asas kerana kelas Hos menyediakan operator tanpa operasi B*() const yang mengembalikan nullptr. Ini membenarkan pengkompil untuk menggantikan D* untuk B* dalam fungsi check(B*, int), walaupun B ialah pangkalan peribadi D.
Kepentingan Operator Const
Pengendali B*() yang diisytiharkan const adalah penting kerana ia memastikan bahawa pengkompil memilih fungsi penukaran calon yang mengambil hujah objek tersirat ini sebagai rujukan bukan const. Perbezaan halus ini membolehkan sifat_asas_sifat membezakan antara warisan awam dan persendirian dengan menyemak sama ada penukaran kepada jenis asas dibenarkan.
Fungsi Semak Templat
Keputusan untuk gunakan semakan fungsi templat(D*, T) dan bukannya semakan fungsi bukan templat(B*, int) bergantung pada peraturan resolusi beban lampau. Apabila mencari fungsi penukaran, jika dua fungsi sama berdaya maju, jenis pemulangan fungsi menentukan yang mana lebih baik. Dengan menggunakan templat dengan jenis pulangan ya, ia membolehkan pengkompil memilih versi semakan yang betul berdasarkan kewujudan penukaran yang ditentukan pengguna daripada D* kepada B*.
Atas ialah kandungan terperinci Bagaimanakah Sifat `is_base_of` Menentukan Hubungan Kelas Asas, Walaupun dengan Pewarisan Persendirian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!