Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menentukan Pengkhususan Templat dalam C ?

Bagaimana untuk Menentukan Pengkhususan Templat dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-11-13 06:25:02
asal
813 orang telah melayarinya

How to Determine Template Specialization in C  ?

Menentukan Pengkhususan Templat

Dalam C, selalunya perlu untuk memastikan sama ada jenis tertentu ialah pengkhususan templat kelas tertentu. Pertimbangkan contoh di bawah:

template <class T>
struct A {};
Salin selepas log masuk

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

Sebagai contoh, di sini A sepatutnya sepadan dengan A<*> dan cetak 1.

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

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

Atas ialah kandungan terperinci Bagaimana untuk Menentukan Pengkhususan Templat dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan