Bagaimana Mengesan Bekas STL Menggunakan Ciri Jenis dalam C?

Patricia Arquette
Lepaskan: 2024-10-26 01:58:28
asal
926 orang telah melayarinya

How to Detect STL Containers Using Type Traits in C  ?

Mengesan Bekas STL Menggunakan Ciri Jenis

Pengenalan

Tret jenis ialah alat berkuasa dalam C yang menilai sifat sesuatu jenis pada masa penyusunan . Dalam soalan ini, kami berhasrat untuk membina ciri jenis (is_vector atau is_container) yang membezakan pelbagai jenis bekas STL biasa.

Penyelesaian untuk is_vector

Pelaksanaan yang disediakan untuk is_vector menghadapi ralat seperti yang berlaku tidak menggunakan parameter templat U. Untuk membetulkannya, berikut ialah versi yang disemak:

<code class="cpp">template<class T>
struct is_vector {
  static bool const value = false;
};

template<class U>
struct is_vector<std::vector<U>> {
  static bool const value = true;
};</code>
Salin selepas log masuk

Mengerti kepada is_container

Memperluas konsep is_vector, kita boleh mencipta sifat is_container generik yang mengenal pasti pelbagai Jenis kontena STL:

<code class="cpp">template<typename T, typename _ = void>
struct is_container : std::false_type {};

template<typename... Ts>
struct is_container_helper {};

template<typename T>
struct is_container<
        T,
        std::conditional_t<
            false,
            is_container_helper<
                typename T::value_type,
                typename T::size_type,
                typename T::iterator,
                decltype(std::declval<T>().size()),
                decltype(std::declval<T>().begin()),
                decltype(std::declval<T>().end())
                >,
            void
            >
        > : public std::true_type {};</code>
Salin selepas log masuk

Ciri is_container yang dipertingkat ini boleh disesuaikan untuk menyemak ciri khusus kontena tambahan atau terhad kepada bekas STL sahaja dengan mengesahkan kehadiran fungsi dan jenis ahli tertentu.

Atas ialah kandungan terperinci Bagaimana Mengesan Bekas STL Menggunakan Ciri Jenis dalam C?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!