Rumah > Artikel > pembangunan bahagian belakang > Bolehkah SFINAE Digunakan untuk Mengesan Fungsi Ahli Diwarisi dalam 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!