Dalam C, selalunya perlu untuk memastikan sama ada jenis tertentu ialah pengkhususan templat kelas tertentu. Pertimbangkan contoh di bawah:
template <class T> struct A {};
Bagaimana kita boleh menentukan sama ada CompareT ialah A<*> untuk beberapa jenis * dalam kod berikut?
template<class CompareT> void compare(){ // is this A ? cout << is_same< A<*>, CompareT >::value; // A<*> ???? } int main(){ compare< A<int> >(); }
Sebagai contoh, di sini A
Penyelesaian:
Untuk mencapainya, kita boleh menggunakan metafungsi tersuai yang dipanggil is_specialization:
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 {};
Metafungsi ini kembali benar jika T ialah pengkhususan Templat dan palsu sebaliknya. Untuk menggambarkan penggunaannya:
static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
Atas ialah kandungan terperinci Bagaimana untuk Menentukan Pengkhususan Templat dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!