Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menentukan sama ada Jenis ialah Bekas STL pada Masa Kompilasi dalam C?
Menentukan Jenis Bekas STL pada Masa Penyusunan
Dalam artikel ini, kami meneroka keperluan biasa dalam C : menentukan sama ada jenis tertentu mewakili Bekas STL pada masa penyusunan. Bekas STL ialah struktur data yang mematuhi set keperluan tertentu, seperti mempunyai pemula begin() dan end().
Masalahnya
Persoalannya timbul daripada keperluan untuk mempunyai templat yang boleh mengenal pasti sama ada jenis yang diberikan ialah bekas STL. Walau bagaimanapun, kod yang disediakan tidak mempunyai pengkhususan yang diperlukan untuk mengendalikan bekas STL tertentu seperti std::vector, std::deque, std::set, dll.
Penyelesaian
Untuk menangani perkara ini, kami membentangkan penyelesaian yang komprehensif:
is_container Class Templat
Templat kelas ini menggunakan ciri khusus untuk menentukan sama ada sesuatu jenis memenuhi kriteria bekas STL:
template<typename T> struct is_container : std::integral_constant<bool, has_const_iterator<T>::value && has_begin_end<T>::beg_value && has_begin_end<T>::end_value> { };
Penggunaan
Menggunakan is_container adalah mudah. Hantar jenis kepada templat dan nilaikan nilainya:
std::cout << is_container<std::vector<int>>::value << std::endl; // true std::cout << is_container<int>::value << std::endl; // false
Kelas Ciri Pembantu
Templat kelas is_container bergantung pada kelas ciri pembantu berikut:
Kesimpulan
Ini teknik menyediakan kaedah ringkas dan boleh dipercayai untuk menentukan sama ada sesuatu jenis mewakili bekas STL pada masa penyusunan, membolehkan fleksibel dan manipulasi kod selamat taip.
Atas ialah kandungan terperinci Bagaimana untuk Menentukan sama ada Jenis ialah Bekas STL pada Masa Kompilasi dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!