Bolehkah saya Tentukan sama ada Kelas Adalah Pengkhususan Templat Kelas?

DDD
Lepaskan: 2024-11-12 11:52:02
asal
682 orang telah melayarinya

 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 {};
Salin selepas log masuk

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>{}, "");
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan