Konstruktorinitialisierung für C-Arrays
Das Initialisieren von Arrays von Objekten in C kann aufgrund des Fehlens einer ähnlichen Array-Initialisierersyntax eine Herausforderung sein verfügbar für Nicht-Array-Objekte.
Betrachten Sie das folgende Nicht-Array-Beispiel:
struct Foo { Foo(int x) { /* ... */ } }; struct Bar { Foo foo; Bar() : foo(4) {} };
In diesem Beispiel initialisiert der Bar-Konstruktor das foo-Mitgliedsobjekt mithilfe der Initialisierungssyntax: foo(4 ).
Bei Arrays ist die Situation jedoch anders. Die folgende Syntax ist falsch:
struct Foo { Foo(int x) { /* ... */ } }; struct Baz { Foo foo[3]; // ??? I know the following syntax is wrong, but what's correct? Baz() : foo[0](4), foo[1](5), foo[2](6) {} };
Lösung
Leider im Kontext von C 98 (was hier der Fall zu sein scheint, wie der eingebettete Prozessor vermuten lässt). Einschränkung) gibt es keine Möglichkeit, die Initialisierung von Array-Mitgliedern mithilfe von Konstruktorinitialisierern zu erreichen. Die Problemumgehung besteht darin, einen Standardkonstruktor für Array-Mitglieder bereitzustellen und alle erforderlichen Initialisierungen innerhalb des Konstruktors durchzuführen.
Zum Beispiel:
struct Foo { Foo() : value(0) { /* ... */ } // Default constructor with a default value Foo(int x) { /* ... */ } }; struct Baz { Foo foo[3]; Baz() { foo[0] = Foo(4); foo[1] = Foo(5); foo[2] = Foo(6); } };
Dieser Ansatz ist zwar nicht so elegant wie die direkte Initialisierung, aber er ermöglicht das Erstellen und Initialisieren von Arrays von Objekten, ohne auf externe Initialisierungsmethoden oder STL-Konstrukte zurückgreifen zu müssen, die in eingebetteten Umgebungen möglicherweise nicht verfügbar sind.
Das obige ist der detaillierte Inhalt vonWie initialisiere ich C-Arrays von Objekten in einer eingebetteten Umgebung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!