Creating Static Arrays Programmatically at Compile Time
In C , static arrays can be initialized at compile time to hold specific values. Consider the following example:
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
Question 1: Assigning Values Programmatically
Is it possible to programmatically assign these values using metaprogramming techniques at compile time?
Answer:
Using C 0x features, it is possible to create local or member arrays of templates and initialize them from a variadic template argument list. However, this is limited by the maximum template instantiation depth and may not be practical for large arrays.
Question 2: Selective Assignment
Assuming certain array elements should have the same value while others vary, can selective assignment be performed programmatically at compile time?
Answer:
Using a template metafunction, one can create an array of values and use it to partially initialize a static array. The following example selectively assigns values based on the index:
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; } } }
By leveraging template metafunctions, selective assignment can be achieved in a programmatic manner while ensuring compile-time evaluation.
The above is the detailed content of Can Static Arrays Be Programmatically Initialized at Compile Time in C ?. For more information, please follow other related articles on the PHP Chinese website!