Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memulakan `std::array` dengan Elegan dengan Jenis Boleh Bina Bukan Lalai dalam C ?

Bagaimana untuk Memulakan `std::array` dengan Elegan dengan Jenis Boleh Bina Bukan Lalai dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-10-27 20:17:01934semak imbas

 How to Elegantly Initialize `std::array` with Non-Default Constructible Types in C  ?

Permulaan Elegan std::array dengan Jenis Boleh Bina Bukan Lalai

Dalam alam C , std::array menawarkan cara yang mudah untuk mengendalikan tatasusunan saiz tetap. Walau bagaimanapun, memulakan elemen dalam tatasusunan menimbulkan cabaran apabila berurusan dengan jenis yang tidak mempunyai pembina lalai.

Pertimbangkan coretan kod berikut:

<code class="cpp">template<typename T, int N>
void f(T value)
{
    std::array<T, N> items = {value, value, value, value, value};
}</code>

Walaupun mudah, mengulang nilai secara manual menjadi membosankan kerana N bertambah. Untuk menangani isu ini, pendekatan yang lebih elegan ialah memanfaatkan pengikatan berstruktur dan templat variadik C 17.

Menggunakan Penjana Jujukan dan Fungsi Ulangan

Kunci kepada elegan ini penyelesaian terletak pada penjanaan urutan jenis seq<0,1,2,3,...N-1> menggunakan genseq_t<> penjana. Dengan jenis jujukan ini, kita boleh mentakrifkan fungsi ulangan yang mengambil nilai dan jujukan yang dijana sebagai parameter dan mengembalikan std::array diisi dengan nilai berulang.

Contoh Pelaksanaan

<code class="cpp">template<typename T, int N>
void f(T value)
{
    // genseq_t<N> represents seq<0,1,...N-1>
    std::array<T, N> items = repeat(value, genseq_t<N>{});
}</code>

Butiran Corak

  • genseq_t< ;N>::type mewakili jenis urutan yang menjangkau dari 0 hingga N-1.
  • ulang(nilai, seq) menilai kepada satu std::array dengan setiap elemen yang dimulakan kepada nilai.

Teknik ini membolehkan permulaan yang ringkas dan elegan bagi std::array walaupun apabila T tidak mempunyai pembina lalai.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan `std::array` dengan Elegan dengan Jenis Boleh Bina Bukan Lalai 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