On peut définir un tableau statique au moment de la compilation comme suit :
const std::size_t size = 5;
unsigned int list[size] = { 1, 2, 3, 4, 5 };
Question 1 - Est-il possible, en utilisant divers types de techniques de métaprogrammation, d'attribuer ces valeurs de manière "programmatique" au moment de la compilation ?
Question 2 - En supposant que toutes les valeurs du tableau soient les mêmes, à l'exception de quelques-unes, est-il possible d'attribuer des valeurs de manière sélective au moment de la compilation, de manière programmatique ?
eg :
const std::size_t size = 7;
unsigned int list[size] = { 0, 0, 2, 3, 0, 0, 0 };
- Les solutions utilisant C++0x sont les bienvenues
- Le tableau peut être assez grand, quelques centaines d'éléments
- Pour l'instant, le tableau ne comprendra que les types de POD
- On peut également supposer que la taille du le tableau sera connue à l'avance, de façon statique et conforme au temps de compilation de manière statique.
- Les solutions doivent être en C++ (pas de script, pas de macros, pas de pp ou de solutions basées sur un générateur de code, s'il vous plaît)
UPDATE : La solution de Georg Fritzsche est étonnante, elle nécessite un peu de travail pour la faire compiler sur les compilateurs msvc et intel, mais elle constitue néanmoins une approche très intéressante du problème.
5 votes
@GMan : L'image est telle que je l'ai expliquée, je veux savoir s'il est possible de remplir un tableau statique au moment de la compilation en utilisant seulement c++. pas d'intentions cachées, etc.
3 votes
Le commentaire de @Hippicoder @GMan est pertinent, car vous ne pouvez pas le faire en C++ ni en C++0x. Fournissez aux lecteurs le contexte, et les gourous vous trouveraient une solution (alternative)adaptée au problème initial.
0 votes
@Hippicoder : Eh bien, par exemple, d'où viennent les valeurs de votre exemple ? Quelle est leur relation avec l'environnement de compilation ? Viennent-elles d'un fichier texte ? Sont-elles des drapeaux indiquant si les macros sont définies ? Sont-elles des compteurs de quelque sorte ?
0 votes
De plus, devez-vous indexer les valeurs au moment de la compilation ou de l'exécution ?
5 votes
Supposons qu'un processus nécessite une LUT, selon le mode du processus, les LUT sont les mêmes sauf pour certaines des valeurs, toutes les autres valeurs sont les mêmes ou peuvent être générées en évaluant une séquence simple comme f(n) = 2*n ou f(n) = 1 + n etc...
0 votes
@Hippy, là où je travaille, du code est généré en permanence et nous n'avons pas encore fait faillite.
2 votes
Je pense que le premier pourrait être fait avec un modèle récursif et en passant une constante + 1 à chaque niveau plus profond. Je suis en train d'y réfléchir.
5 votes
@Michael Dorgan : J'ai pensé à ça aussi, mais je n'arrive pas à trouver la bonne façon de le faire, pour l'instant ma solution implique de récupérer une valeur d'un enum à partir d'une structure modélisée, mais cela me demande toujours d'instancier n templates ce qui augmente considérablement le temps de compilation.
2 votes
La méta-programmation par gabarit ne donne que des structures récursives, le mieux que l'on puisse obtenir est une profondeur d'instantanéité de
N/M
au lieu deN
.