Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengesan Bekas STL Menggunakan Ciri Jenis dalam C?
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.
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>
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!