Maison >développement back-end >C++ >Les tableaux statiques peuvent-ils être initialisés par programme au moment de la compilation en C ?
Création de tableaux statiques par programme au moment de la compilation
En C, les tableaux statiques peuvent être initialisés au moment de la compilation pour contenir des valeurs spécifiques. Prenons l'exemple suivant :
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
Question 1 : Attribution de valeurs par programme
Est-il possible d'attribuer ces valeurs par programme à l'aide de techniques de métaprogrammation au moment de la compilation ?
Réponse :
À l'aide des fonctionnalités C 0x, il est possible de créer des tableaux de modèles locaux ou membres et de les initialiser à partir d'une liste d'arguments de modèle variadique. Cependant, cela est limité par la profondeur maximale d'instanciation du modèle et peut ne pas être pratique pour les grands tableaux.
Question 2 : affectation sélective
En supposant que certains éléments du tableau doivent avoir le même valeur alors que d'autres varient, l'affectation sélective peut-elle être effectuée par programme au moment de la compilation ?
Réponse :
À l'aide d'une métafonction de modèle, on peut créer un tableau de valeurs et utiliser pour initialiser partiellement un tableau statique. L'exemple suivant attribue de manière sélective des valeurs en fonction de l'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; } } }
En tirant parti des métafonctions du modèle, une affectation sélective peut être réalisée de manière programmatique tout en garantissant une évaluation au moment de la compilation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!