Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pelaksanaan C `is_base_of` Menggunakan CRTP Ini Berfungsi?

Bagaimanakah Pelaksanaan C `is_base_of` Menggunakan CRTP Ini Berfungsi?

DDD
Lepaskan: 2024-11-22 05:40:15
asal
203 orang telah melayarinya

How Does This C   `is_base_of` Implementation Using CRTP Work?

Bagaimanakah pelaksanaan is_base_of trait ini berfungsi?

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).

Cara ia berfungsi

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.

  1. Fungsi semak melebihkan dua fungsi:

    • semakan ya statik(D*, T)
    • semakan tiada statik(B*, int)
  2. Hos boleh ditukar kepada kedua-dua D* dan B* terima kasih kepada jujukan penukaran yang ditentukan pengguna.
  3. Jika B ialah asas D, fungsi semakan pertama dipanggil dengan Host ditukar kepada D* dan T arbitrari. Fungsi semak mengembalikan ya jika penukaran berjaya (iaitu, D mewarisi daripada B).
  4. Jika B bukan asas D, fungsi semak kedua dipanggil dengan Host ditukar kepada B* dan nilai int ditentukan. Fungsi semak mengembalikan tidak jika penukaran kepada B* berjaya (iaitu, B dan D tidak berkaitan).
  5. is_base_of::value ditetapkan kepada benar jika fungsi semak mengembalikan a ya dan palsu sebaliknya.

Kepentingan kata kunci const dalam operator B*

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&.

Mengapa fungsi semak pertama lebih baik?

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan