Mencipta Tatasusunan Statik Secara Pengaturcaraan pada Masa Kompilasi
Dalam C , tatasusunan statik boleh dimulakan pada masa penyusunan untuk memegang nilai tertentu. Pertimbangkan contoh berikut:
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
Soalan 1: Menetapkan Nilai Secara Pengaturcaraan
Adakah mungkin untuk menetapkan nilai ini secara pengaturcaraan menggunakan teknik pengaturcaraan meta pada masa penyusunan?
Jawapan:
Menggunakan ciri C 0x, adalah mungkin untuk mencipta tatasusunan tempatan atau ahli templat dan memulakannya daripada senarai hujah templat variadic. Walau bagaimanapun, ini dihadkan oleh kedalaman instantiasi templat maksimum dan mungkin tidak praktikal untuk tatasusunan yang besar.
Soalan 2: Tugasan Selektif
Dengan mengandaikan elemen tatasusunan tertentu harus mempunyai nilai yang sama manakala yang lain berbeza-beza, bolehkah tugasan terpilih dilakukan secara pengaturcaraan pada masa penyusunan?
Jawapan:
Menggunakan metafungsi templat, seseorang boleh mencipta tatasusunan nilai dan menggunakan ia untuk memulakan sebahagian tatasusunan statik. Contoh berikut secara selektif memberikan nilai berdasarkan indeks:
template<size_t index> struct MetaFunc { enum { value = index + 1 }; }; void test() { const std::size_t size = 7; typedef generate_array<size, MetaFunc>::result A; for (std::size_t i=0; i<size; ++i) { if (i <= 1 || i >= 4) { A::data[i] = 0; } } }
Dengan memanfaatkan metafungsi templat, tugasan terpilih boleh dicapai dalam cara yang terprogram sambil memastikan penilaian masa kompilasi.
Atas ialah kandungan terperinci Bolehkah Tatasusunan Statik Dimulakan Secara Program pada Masa Penyusun dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!