Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Meniru Permulaan Tatasusunan Gaya C dengan `std::array` dalam C ?

Bagaimanakah Saya Boleh Meniru Permulaan Tatasusunan Gaya C dengan `std::array` dalam C ?

Barbara Streisand
Lepaskan: 2024-12-17 20:23:14
asal
599 orang telah melayarinya

How Can I Mimic C-Style Array Initialization with `std::array` in C  ?

Meniru C Array Initialization dengan std::array

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;
}
Salin selepas log masuk

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:

  • Gunakan makro untuk memudahkan sintaks:
#define ARRAY(...) make_array(__VA_ARGS__)
Salin selepas log masuk
  • Benarkan permulaan jenis bersarang dengan mengubah suai tandatangan fungsi:
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;
}
Salin selepas log masuk

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});
Salin selepas log masuk

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!

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