Initialisation d'un std::array constructible non par défaut sans répétition
En C, initialisation d'un std::array d'éléments constructibles non par défaut peut être un défi. Les méthodes d'initialisation standard deviennent fastidieuses lorsque n, la taille du tableau, est grand ou est un paramètre de modèle.
Solution :
Une solution élégante exploite une combinaison d'itérateurs et de modèles. Voici comment cela fonctionne :
Nous définissons deux utilitaires d'assistance :
En utilisant ces utilitaires, nous pouvons initialiser le std::array dans la fonction de modèle f comme suit :
<code class="cpp">template<typename T, int N> void f(T value) { std::array<T, N> items = repeat(value, genseq_t<N>{}); }</code>
Détails de mise en œuvre :
Exemple :
Considérons une initialisation avec une valeur comme entier et n comme paramètre de modèle :
<code class="cpp">void f(int value) { std::array<T, 5> items = repeat(value, genseq_t<5>{}); }</code>
Ici, les éléments seront initialisé avec la valeur répétée cinq fois : {value, value, value, value, value}.
Avantages :
Cette approche est plus concise, surtout lorsque n est grand. Cela élimine également le besoin de répéter manuellement la valeur.
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!