Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Meniru Permulaan Tatasusunan Gaya C dengan `std::array` dalam C ?
Dalam pengaturcaraan C, pengaturcaraan tatasusunan boleh dipermudahkan menggunakan sintaks int arr[] = { e1, e2, e3 , ... }, di mana bilangan elemen disimpulkan secara automatik. Walaupun std::array menyediakan alternatif moden kepada tatasusunan C, ia tidak mempunyai kaedah permulaan yang mudah ini. Artikel ini meneroka teknik untuk meniru tingkah laku ini dengan std::array.
Satu pendekatan melibatkan fungsi templat variadik:
template<class T, class... Tail> auto make_array(T head, Tail... tail) -> std::array<T, 1 + sizeof...(Tail)> { std::array<T, 1 + sizeof...(Tail)> a = { head, tail ... }; return a; }
Fungsi ini mengambil kepala elemen awal dan sebarang bilangan elemen tambahan sebagai ekor. Ia mencipta std::array saiz yang sesuai, memulakannya dengan elemen yang disediakan. Sebagai contoh, kod auto a = make_array(1, 2, 3); memulakan std::array yang mengandungi elemen 1, 2 dan 3.
Walau bagaimanapun, pendekatan ini menghadapi pengehadan. Ia bergantung pada keupayaan pengkompil untuk mengoptimumkan salinan nilai yang dikembalikan, yang mungkin tidak selalu boleh dipercayai. Selain itu, ia tidak boleh memulakan jenis bersarang, ciri yang disokong oleh pemulaan tatasusunan C. Untuk mengatasi had ini, pertimbangkan penambahbaikan berikut:
#define ARRAY(...) make_array(__VA_ARGS__)
template<class T, class... Tail> auto make_array(std::array<T, Size> head, Tail... tail) -> std::array<T, Size + sizeof...(Tail)> { std::array<T, Size + sizeof...(Tail)> a = { head, tail ... }; return a; }
Menggunakan penambahbaikan ini, pemula jenis bersarang menjadi mungkin, seperti yang dilihat dalam contoh:
#define ARRAY(...) make_array(__VA_ARGS__) struct A { int a; int b; }; auto arr = ARRAY(A{1, 2}, A{3, 4});
Teknik ini menyediakan penyelesaian yang mantap untuk mencontohi pemulaan tatasusunan C dengan std::array, membolehkan pemulaan mudah dan ringkas bagi objek std::array dalam kod C moden .
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meniru Permulaan Tatasusunan Gaya C dengan `std::array` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!