Maison >développement back-end >C++ >Les techniques de métaprogrammation peuvent-elles être utilisées pour attribuer par programme des valeurs à des tableaux statiques au moment de la compilation en C ?
C offre la possibilité de définir des tableaux statiques au moment de la compilation à l'aide de déclarations explicites telles que :
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
Question 1 : Attribution de valeur programmatique
Les techniques de métaprogrammation peuvent-elles être utilisé pour attribuer des valeurs à ces éléments par programme au moment de la compilation ?
Réponse :
C 0x introduit le concept d'arguments variadiques de modèle, permettant l'initialisation de tableaux à partir d'une variable nombre d'arguments. Cependant, la profondeur d'instanciation du modèle limite le caractère pratique de cette approche pour les grands tableaux.
Question 2 : attribution sélective de valeurs
En supposant que la plupart des éléments du tableau sont identiques, les valeurs peuvent-elles être assigné sélectivement de manière programmatique lors de la compilation temps ?
Réponse :
Une approche plus raffinée utilise les métafonctions C 0x et la spécialisation de modèles pour générer des tableaux avec des valeurs intercalées. Cela implique une structure de modèle récursive generate_array et une métafonction personnalisée MetaFunc pour définir les valeurs des éléments.
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"; }
Cette solution implique une instanciation de modèle récursive et convient aux tableaux de taille limitée en raison des limitations de profondeur du modèle.
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!