Initialisation élégante de std::array
Dans le domaine du C, std::array
Considérez l'extrait de code suivant :
<code class="cpp">template<typename T, int N> void f(T value) { std::array<T, N> items = {value, value, value, value, value}; }</code>
Bien que simple, répéter manuellement la valeur devient fastidieux car N augmente. Pour résoudre ce problème, une approche plus élégante consiste à exploiter les liaisons structurées et les modèles variadiques de C 17.
Utilisation des générateurs de séquence et de la fonction de répétition
La clé de cet élégant La solution réside dans la génération d'un seq<0,1,2,3,...N-1> en utilisant le genseq_t<> générateur. Avec ce type de séquence, nous pouvons définir une fonction de répétition qui prend une valeur et la séquence générée comme paramètres et renvoie un std::array
Exemple de mise en œuvre
<code class="cpp">template<typename T, int N> void f(T value) { // genseq_t<N> represents seq<0,1,...N-1> std::array<T, N> items = repeat(value, genseq_t<N>{}); }</code>
Détails du modèle
Cette technique permet une initialisation concise et élégante de std::array
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!