Adakah Kelas Pengkhususan Templat?
Dalam C , ia boleh berguna untuk menentukan sama ada jenis tertentu ialah pengkhususan bagi sesuatu templat kelas. Sebagai contoh, pertimbangkan kod berikut:
template<class T> struct A {}; template<class CompareT> void compare() { // is this A? cout << is_same< A<*> , CompareT >::value << endl; // A<?> ???? }
Memandangkan kod di atas, bagaimana kami boleh mengesahkan jika CompareT ialah A<> untuk beberapa jenis *?
Penyelesaian:
Menggunakan metafungsi templat is_specialization, anda boleh menyemak sama ada sesuatu jenis ialah pengkhususan templat kelas. Berikut ialah contoh:
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>{}, "");
Dalam contoh di atas, is_specialization mengambil dua hujah: T dan Templat. Jika T ialah pengkhususan Templat, is_specialization
Atas ialah kandungan terperinci Adakah Kelas Pengkhususan Templat dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!