Permulaan Elegan std::array
Dalam konteks ini, memulakan std::array boleh menjadi cabaran apabila jenis yang terkandung (T) tidak mempunyai pembina lalai. Penyelesaian biasa melibatkan pengulangan nilai secara manual untuk mengisi tatasusunan, proses yang membosankan dan mudah ralat untuk nilai n yang besar.
Nasib baik, pendekatan yang lebih elegan wujud menggunakan gabungan jenis jujukan dan fungsi ulangan tersuai. Pertimbangkan kod berikut:
<code class="cpp">template<typename T, int N> void f(T value) { // Generate a sequence of numbers: 0, 1, ..., N-1 using genseq_t = genseq_t<N>; std::array<T, N> items = repeat(value, genseq_t{}); }</code>
Genseq_t
Pelaksanaan fungsi ulangan melibatkan membongkar jujukan dan mengulangi nilai untuk setiap elemen menggunakan sintaks ringkas:
<code class="cpp">template<typename T, int...N> auto repeat(T value, seq<N...>) -> std::array<T, sizeof...(N)> { // Unpack N, repeating 'value' sizeof...(N) times return {(N, value)...}; }</code>
Jenis genseq_t ditakrifkan secara rekursif menggunakan operasi push_back untuk mencipta jujukan:
<code class="cpp">template<int N> struct genseq : genseq<N - 1>::type::template push_back<N - 1> {};</code>
Jujukan tersuai dan fungsi ulangan menyediakan fleksibel dan penyelesaian yang elegan untuk memulakan std::array
Atas ialah kandungan terperinci Bagaimana untuk Memulakan `std::array` untuk Jenis Boleh Bina Bukan Lalai Secara Elegan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!