C menyediakan keupayaan untuk menentukan tatasusunan statik pada masa penyusunan menggunakan pengisytiharan eksplisit seperti:
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
Soalan 1: Nilai Programmatik Tugasan
Bolehkah teknik pengaturcaraan meta digunakan untuk memberikan nilai kepada elemen ini secara pemprograman pada masa penyusunan?
Jawapan:
C 0x memperkenalkan konsep argumen variadic templat, membenarkan permulaan tatasusunan daripada bilangan argumen yang berubah-ubah. Walau bagaimanapun, kedalaman instantiasi templat mengehadkan kepraktisan pendekatan ini untuk tatasusunan besar.
Soalan 2: Penetapan Nilai Terpilih
Dengan mengandaikan kebanyakan elemen tatasusunan adalah sama, bolehkah nilai secara selektif ditugaskan secara berprogram semasa menyusun masa?
Jawapan:
Pendekatan yang lebih halus menggunakan metafungsi C 0x dan pengkhususan templat untuk menjana tatasusunan dengan nilai berselang-seli. Ini melibatkan struct templat rekursif generate_array dan MetaFunc metafungsi tersuai untuk mentakrifkan nilai elemen.
template<size_t index> struct MetaFunc { enum { value = index + 1 }; }; void test() { const size_t count = 5; typedef generate_array<count, MetaFunc>::result A; for (size_t i=0; i<count; ++i) std::cout << A::data[i] << "\n"; }
Penyelesaian ini melibatkan instantiasi templat rekursif dan sesuai untuk tatasusunan saiz terhad disebabkan oleh had kedalaman templat.
Atas ialah kandungan terperinci Bolehkah teknik metaprogramming digunakan untuk menetapkan nilai secara pemrograman kepada tatasusunan statik pada masa penyusunan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!