Beim Versuch, ein Member-Array mit einer Initialisiererliste zu initialisieren, tritt ein Compilerfehler auf: inkompatible Typen in der Zuweisung von 'std::initializer_list
Anstelle eines Initialisierungslistenkonstruktors können Sie sich für einen Variadic entscheiden Vorlagenkonstruktor:
<code class="cpp">struct Foo { int x[2]; template <typename... Ts> Foo(Ts... ts) : x{ts...} {} };</code>
Mit diesem Ansatz können Sie Ihr Foo-Objekt wie folgt initialisieren:
<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>
Wenn Konstanz nicht unbedingt erforderlich ist, können Sie das Array innerhalb des Funktionskörpers initialisieren, nachdem Sie die Initialisierung im Konstruktor übersprungen haben:
<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>
Dieser Methode fehlt jedoch die Überprüfung der Grenzen zur Kompilierungszeit, die die variadic-Vorlage bietet Konstruktor.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein C-Mitgliedsarray mit einer Initialisierungsliste?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!