Lors de la tentative d'initialisation d'un tableau de membres avec une liste d'initialisation, vous rencontrez une erreur du compilateur : types incompatibles dans l'affectation de 'std::initializer_list
Plutôt qu'un constructeur de liste d'initialisation, vous pouvez opter pour un constructeur de modèle variadique constructeur de modèle :
<code class="cpp">struct Foo { int x[2]; template <typename... Ts> Foo(Ts... ts) : x{ts...} {} };</code>
Avec cette approche, vous pouvez initialiser votre objet Foo comme suit :
<code class="cpp">Foo f1(1, 2); // OK Foo f2{1, 2}; // Also OK Foo f3(42); // OK; x[1] zero-initialized Foo f4(1, 2, 3); // Error: too many initializers</code>
Si la constance n'est pas essentielle, vous pouvez initialiser le tableau dans le corps de la fonction après avoir ignoré l'initialisation dans le constructeur :
<code class="cpp">struct Foo { int x[2]; // or std::array<int, 2> x; Foo(std::initializer_list<int> il) { std::copy(il.begin(), il.end(), x); // or std::copy(il.begin(), il.end(), x.begin()); // or x.fill(il.begin()); } }</code>
Cette méthode ne dispose cependant pas de la vérification des limites au moment de la compilation offerte par le modèle variadique. constructeur.
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!