Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah SFINAE Digunakan untuk Mengesan Fungsi Ahli Diwarisi dalam C?

Bolehkah SFINAE Digunakan untuk Mengesan Fungsi Ahli Diwarisi dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-11-05 13:37:02196semak imbas

Can SFINAE Be Used to Detect Inherited Member Functions in C  ?

SFINAE untuk Mengesan Fungsi Ahli Kelas Asas

Dalam C , SFINAE (Kegagalan Penggantian Bukan Satu Ralat) biasanya digunakan untuk menyemak kehadiran fungsi ahli tertentu dalam kelas. Walau bagaimanapun, mengesan fungsi ahli yang diwarisi menggunakan SFINAE memerlukan pendekatan yang lebih rumit.

Kod yang diberikan dalam soalan cuba memanfaatkan SFINAE untuk tujuan ini tetapi gagal mengambil kira warisan. Untuk menangani had ini, penyelesaian yang dibentangkan di sini menggunakan strategi yang berbeza.

Diilhamkan oleh perbincangan dalam urutan pengguna Boost, kelas templat has_foo ditakrifkan. Ia mengeksploitasi mekanisme semakan jenis untuk membezakan antara fungsi ahli langsung dan warisan. Fungsi deduce cuba menyimpulkan jenis yang sepadan dengan tandatangan fungsi ahli yang diharapkan. Jika potongan berjaya (iaitu, saiz jenis yang disimpulkan ialah ya), bendera hasil ditetapkan kepada benar, menunjukkan kehadiran fungsi ahli yang diwarisi.

Menggunakan penyelesaian ini pada kelas contoh, A, B, dan C, keputusan menunjukkan bahawa has_foo mengenali fungsi ahli yang diwarisi dengan betul dalam B.

Atas ialah kandungan terperinci Bolehkah SFINAE Digunakan untuk Mengesan Fungsi Ahli Diwarisi dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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