Coretan kod yang anda berikan melaksanakan is_base_of trait dalam C , yang menyemak sama ada satu kelas mewarisi daripada kelas lain. Ia menggunakan teknik yang dipanggil "Curiously Recurring Template Pattern" (CRTP).
Host ialah kelas templat yang membungkus kelas terbitan dan menyediakan cara untuk mengakses pengendalinya B* fungsi. Apabila kami ingin menyemak sama ada B ialah kelas asas D, kami memanggil is_base_of::value.
Fungsi semak melebihkan dua fungsi:
Pengendali B* mestilah const kerana jika tidak, ia akan menjadi samar-samar apabila memilih fungsi semak yang hendak dipanggil. Dengan kata kunci const, pengkompil tahu untuk menggunakan fungsi semak yang mengambil B* const&.
Fungsi semak pertama adalah lebih baik kerana ia menggunakan pengguna -urutan penukaran ditakrifkan yang menukar daripada D* kepada B*. Ini lebih khusus daripada fungsi semakan kedua, yang menggunakan jujukan penukaran yang ditentukan pengguna yang menukar daripada B* kepada int.
Atas ialah kandungan terperinci Bagaimanakah Pelaksanaan C `is_base_of` Menggunakan CRTP Ini Berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!