Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah saya Tentukan sama ada Kelas Adalah Pengkhususan Templat Kelas?

Bolehkah saya Tentukan sama ada Kelas Adalah Pengkhususan Templat Kelas?

DDD
DDDasal
2024-11-12 11:52:02679semak imbas

 Can I Determine if a Class Is a Specialization of a Class Template?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn