C bietet die Möglichkeit, statische Arrays zur Kompilierungszeit mithilfe expliziter Deklarationen wie:
const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 };
Frage 1: Programmatische Wertzuweisung
Können Metaprogrammierungstechniken genutzt werden? diesen Elementen zur Kompilierungszeit programmgesteuert Werte zuweisen?Antwort:
C 0x führt das Konzept von Template-Variadic-Argumenten ein und ermöglicht die Initialisierung von Arrays aus einer Variablenzahl von Argumenten. Die Tiefe der Vorlageninstanziierung schränkt jedoch die Praktikabilität dieses Ansatzes für große Arrays ein.Frage 2: Selektive Wertzuweisung
Angenommen, die meisten Array-Elemente sind gleich, können Werte vorhanden sein? beim Kompilieren selektiv programmgesteuert zugewiesen Zeit?Antwort:
Ein verfeinerter Ansatz nutzt C 0x-Metafunktionen und Vorlagenspezialisierung, um Arrays mit eingestreuten Werten zu generieren. Dazu gehören eine rekursive Vorlagenstruktur „generate_array“ und eine benutzerdefinierte Metafunktion „MetaFunc“ zum Definieren von Elementwerten.template<size_t index> struct MetaFunc { enum { value = index + 1 }; }; void test() { const size_t count = 5; typedef generate_array<count, MetaFunc>::result A; for (size_t i=0; i<count; ++i) std::cout << A::data[i] << "\n"; }
Das obige ist der detaillierte Inhalt vonKönnen Metaprogrammierungstechniken verwendet werden, um statischen Arrays zur Kompilierungszeit in C programmgesteuert Werte zuzuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!