Rumah > pembangunan bahagian belakang > C++ > Bolehkah teknik metaprogramming digunakan untuk menetapkan nilai secara pemrograman kepada tatasusunan statik pada masa penyusunan dalam C?

Bolehkah teknik metaprogramming digunakan untuk menetapkan nilai secara pemrograman kepada tatasusunan statik pada masa penyusunan dalam C?

Patricia Arquette
Lepaskan: 2024-11-23 01:16:13
asal
447 orang telah melayarinya

Can metaprogramming techniques be used to programmatically assign values to static arrays at compile time in C  ?

Penciptaan Tatasusunan Programmatik pada Masa Kompilasi dalam C

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

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

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!

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