Heim >Backend-Entwicklung >C++ >Können statische Arrays zur Kompilierungszeit in C programmgesteuert initialisiert werden?
Statische Arrays programmgesteuert zur Kompilierungszeit erstellen
In C können statische Arrays zur Kompilierungszeit initialisiert werden, um bestimmte Werte zu speichern. Betrachten Sie das folgende Beispiel:
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
Frage 1: Werte programmgesteuert zuweisen
Ist es möglich, diese Werte mithilfe von Metaprogrammierungstechniken zur Kompilierungszeit programmgesteuert zuzuweisen?
Antwort:
Mithilfe von C 0x-Funktionen ist es möglich, lokale oder Member-Arrays von Vorlagen zu erstellen und diese aus einer Liste verschiedener Vorlagenargumente zu initialisieren. Dies ist jedoch durch die maximale Instanziierungstiefe der Vorlage begrenzt und möglicherweise für große Arrays nicht praktikabel.
Frage 2: Selektive Zuweisung
Angenommen, bestimmte Array-Elemente sollten das haben Derselbe Wert, während andere variieren. Kann eine selektive Zuweisung programmgesteuert zur Kompilierzeit durchgeführt werden?
Antwort:
Mit einer Vorlagenmetafunktion kann man ein Array von Werten erstellen und verwenden es, um ein statisches Array teilweise zu initialisieren. Im folgenden Beispiel werden Werte basierend auf dem Index selektiv zugewiesen:
template<size_t index> struct MetaFunc { enum { value = index + 1 }; }; void test() { const std::size_t size = 7; typedef generate_array<size, MetaFunc>::result A; for (std::size_t i=0; i<size; ++i) { if (i <= 1 || i >= 4) { A::data[i] = 0; } } }
Durch die Nutzung von Vorlagenmetafunktionen kann eine selektive Zuweisung auf programmatische Weise erreicht werden, während gleichzeitig die Auswertung zur Kompilierungszeit sichergestellt wird.
Das obige ist der detaillierte Inhalt vonKönnen statische Arrays zur Kompilierungszeit in C programmgesteuert initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!