„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Kann eine C ++-Metaprogrammierung zum dynamischen Erstellen von statischen Kompilierungs-Zeit-Arrays verwendet werden?

Kann eine C ++-Metaprogrammierung zum dynamischen Erstellen von statischen Kompilierungs-Zeit-Arrays verwendet werden?

Gepostet am 2025-02-06
Durchsuche:982

Can C   Metaprogramming Be Used for Dynamically Creating Compile-Time Static Arrays?

programmatisch statische Arrays zum Kompilieren der Zeit in c

Problemeinführung

traditionell können statische Arrays in C zur Kompilierzeit mit fester Fixierung definiert werden. Größenarrays. Für bestimmte Szenarien kann es jedoch wünschenswert sein, Werte zur Kompilierung programmgesteuert zuzuweisen. In diesem Artikel werden Metaprogrammierungstechniken untersucht, um eine solche dynamische Erstellung statischer Arrays zu erreichen.

Frage 1: Werte programmatisch zuweisen

Mithilfe von C 0x -Funktionen können lokale oder Mitglieds -Arrays von Vorlagen aus einem initialisiert werden Variadische Vorlagenargumentliste. Diese Problemumgehung hat Einschränkungen aufgrund einer maximalen Instanziierungstiefe der maximalen Vorlage.

Frage 2: Selektive Wertzustände

, um Werte zum Kompilieren zuzuweisen, kann eine Kombination von variadischen Vorlagen und Metafunktionen verwendet werden. Die Metafunc -Vorlage dient als Parameterpaket, die eine Sequenz von Werten basierend auf ihrem Index erzeugt. Eine Generate_Array -Vorlage kann dann ein Array der gewünschten Größe unter Verwendung der generierten Werte erstellen. }; Vorlage Klasse f & gt; struct generate_array { typedef typeName generate_array_impl :: Ergebnisergebnis; }; Vorlage Klasse F, unsigned ... args & gt; struct generate_array_impl { typedef typeName generate_array_impl :: value, args ...> :: Ergebnisergebnis; }; Vorlage Klasse F, nicht signiert ... Args & GT; struct generate_array_impl :: value, args ... & gt; Ergebnis; }; template & lt; unsigned ... args & gt; Strukturarrayholder { statische konstant unsignierte Daten [sizeof ... (args)]; }; template & lt; unsigned ... args & gt; const Unsigned Arrayholder & lt; args ... & gt; :: data [sizeof ... (args)] = {args ...};

nutzungsbeispiel

template struct MetaFunc { enum { value = index   1 }; };

template class F> 
struct generate_array {
    typedef typename generate_array_impl::result result;
};

template class F, unsigned... args> 
struct generate_array_impl {
    typedef typename generate_array_impl::value, args...>::result result;
};

template

Dieses Beispiel definiert ein statisches Array der Größe 5 mit Werten {1, 2, 3, 4, 5}, die zur Kompilierung der Metafunc Metafunction zugewiesen wurden.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3