Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich statische Java-Blöcke in C nachahmen?

Wie kann ich statische Java-Blöcke in C nachahmen?

Barbara Streisand
Barbara StreisandOriginal
2024-10-27 02:33:30740Durchsuche

How Can I Mimic Java Static Blocks in C  ?

C-Idiom für statische Java-Blöcke

Statische Java-Blöcke bieten eine praktische Möglichkeit, statische Mitglieder einer Klasse zu initialisieren. In C fehlt jedoch ein expliziter statischer Blockmechanismus innerhalb von Klassen. Um dies zu beheben, stellen wir eine gleichwertige Lösung für beide Szenarien vor:


  1. Initialisierung bei Prozesslast

  2. Initialisierung bei Klasseninstanziierung< /li>

Option 1: Initialisierung beim Laden des Prozesses

C ermöglicht statische Blöcke außerhalb von Klassen in der Übersetzungseinheit Umfang. Mit einer Makrotechnik können Sie solche Blöcke wie folgt definieren:

<code class="cpp">static_block {
    // Initialization code
}</code>

Option 2: Initialisierung bei Klasseninstanziierung

Für dieses Szenario können Sie Folgendes erreichen Statische Member-Initialisierung innerhalb von Klassen unter Verwendung einer Variation des Singleton-Entwurfsmusters:

<code class="cpp">class StaticInitialized {
    static bool initialized;
    virtual void initializeStatics();
};

class MyClass : private StaticInitialized {
    static int field1;
    static int field2;

    void initializeStatics() {
        // Initialization code
    }
};</code>

Dieser Ansatz verwendet einen nicht statischen Konstruktor, der bei der ersten Instanziierung der Klasse aufgerufen wird und die statischen Member initialisiert.

Implementierungsdetails

Die Lösung besteht darin, eine Dummy-Variable zu definieren, die mit einem Funktionsaufruf initialisiert wird. Der statische Blockcode wird im Hauptteil dieser Funktion platziert. Dies verhindert Konflikte mit anderen statischen Blöcken. Die verwendete Makromaschinerie gewährleistet die Einzigartigkeit jedes Blocks.

Das obige ist der detaillierte Inhalt vonWie kann ich statische Java-Blöcke in C nachahmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn