Rumah > pembangunan bahagian belakang > C++ > Adakah Kelas Pengkhususan Templat dalam C?

Adakah Kelas Pengkhususan Templat dalam C?

DDD
Lepaskan: 2024-11-13 04:17:02
asal
826 orang telah melayarinya

Is a Class a Template Specialization in C  ?

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

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

Dalam contoh di atas, is_specialization mengambil dua hujah: T dan Templat. Jika T ialah pengkhususan Templat, is_specialization ialah std::true_type. Jika tidak, ia std::false_type.

Atas ialah kandungan terperinci Adakah Kelas 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan