Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengesan Kewujudan Pembolehubah Ahli Tertentu dalam Kelas C?
Mengesan Kewujudan Pembolehubah Ahli Tertentu dalam Kelas
Dalam kod, menyemak kehadiran pembolehubah ahli tertentu dalam kelas boleh mencabar. Ini boleh menjadi penting apabila melaksanakan algoritma generik atau bekerja dengan kelas dengan nama ahli yang berbeza-beza.
Pernyataan Masalah:
Kod yang disediakan bertujuan untuk menangani isu ini dengan menyemak kewujudan "x" (atau "X") dan "y" (atau "Y") dalam hujah templat kelas. Ini amat berguna dalam kelas seperti CPoint MFC atau PointF GDI, di mana nama pembolehubah ahli berbeza.
Penyelesaian asal menggunakan fungsi templat yang berbeza untuk "x" dan "X." Walau bagaimanapun, ini mengakibatkan isu kompilasi dalam Visual Studio.
Penyelesaian Universal:
Untuk mencapai penyelesaian universal, kami boleh menggunakan SFINAE (Kegagalan Penggantian Bukan Ralat) . Kod yang diubah suai di bawah menunjukkan pendekatan ini:
template <typename T> struct HasX : std::false_type { }; template <typename T> struct HasX<T, decltype((void)T::x, 0)> : std::true_type { };
Kod ini mengeksploitasi SFINAE dengan cuba menggantikan "T::x" dalam "decltype(...)." Jika "T::x" sah, pengkhususan untuk HasX
Penyelesaian ini tidak terhad kepada C 11 dan menyediakan kaedah generik untuk mengesan pembolehubah ahli dalam mana-mana kelas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Kewujudan Pembolehubah Ahli Tertentu dalam Kelas C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!