Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengesan Bekas STL Menggunakan Ciri Jenis dalam C?

Bagaimana Mengesan Bekas STL Menggunakan Ciri Jenis dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 01:58:28925semak imbas

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>

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>

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!

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