Rumah > Artikel > pembangunan bahagian belakang > Bolehkah saya Tentukan sama ada Kelas Adalah Pengkhususan Templat Kelas?
Bolehkah saya mengesahkan Pengkhususan Templat Kelas?
Dalam pembangunan perisian, kita selalunya perlu menentukan sama ada kelas tertentu dikhususkan kerana templat kelas . Pertimbangkan senario berikut:
Masalah:
Diberikan templat kelas seperti
template <class T> struct A {};
Adakah mungkin untuk memastikan sama ada CompareT ialah contoh A<> ; untuk sebarang jenis *? Contohnya, dalam kod di bawah:
template<class CompareT> void compare(){ // is this A ? cout << is_same< A<*> , CompareT >::value; // A<> ???? } int main(){ compare< A<int> >(); }</p> <p>Dalam kes penggunaan ini, A<int> harus sejajar dengan A<>, menghasilkan output 1.</p> <p><strong>Penyelesaian:</strong></p> <p>Kod di bawah membolehkan anda mengesahkan sama ada kelas ialah versi khusus bagi templat:</p> <pre class="brush:php;toolbar:false">template <class T, template <class...> class Template> struct is_specialization : std::false_type {}; template <template <class...> class Template, class... Args> struct is_specialization<Template<Args...>, Template> : std::true_type {}; static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
Dengan menggunakan is_specialization, anda boleh mengenal pasti sama ada kelas ialah pengkhususan templat, memberikan anda kawalan yang lebih baik ke atas struktur dan tingkah laku kod anda.
Atas ialah kandungan terperinci Bolehkah saya Tentukan sama ada Kelas Adalah Pengkhususan Templat Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!