Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Semak Kewujudan `operator==` Bukan Ahli dalam C ?
Dalam C , menyemak kewujudan operator fungsi ahli== adalah mudah menggunakan yang disediakan fungsi ahli. Walau bagaimanapun, menentukan kehadiran pengendali bukan ahli== boleh membuktikan lebih mencabar.
C 03 Kaedah:
Teknik berikut boleh digunakan untuk menyemak kewujudan mana-mana pengendali:
namespace CHECK { class No { bool b[2]; }; template<typename T, typename Arg> No operator== (const T&, const Arg&); bool Check (...); No& Check (const No&); template <typename T, typename Arg = T> struct EqualExists { enum { value = (sizeof(Check(*(T*)(0) == *(Arg*)(0))) != sizeof(No)) }; }; }
Untuk menggunakan kaedah ini, hanya gunakan EqualExists templat:
CHECK::EqualExists<A>::value;
Jika nilai EqualExists bukan sifar, operator bukan ahli== wujud.
C 11 Kaedah:
C 11 menyediakan pendekatan yang lebih bersih menggunakan decltype dan std::declval:
namespace CHECK { struct No {}; template<typename T, typename Arg> No operator== (const T&, const Arg&); template<typename T, typename Arg = T> struct EqualExists { enum { value = !std::is_same<decltype(std::declval<T>() < std::declval<Arg>()), No>::value }; }; }
Untuk menyemak pengendali bukan ahli==, gunakan:
CHECK::EqualExists<A>::value;
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Semak Kewujudan `operator==` Bukan Ahli dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!