Was ist die C ++ - Redewendung für den statischen Java-Block?

Ich habe eine Klasse mit einigen statischen Elementen und möchte einen Code ausführen, um sie zu initialisieren (angenommen, dieser Code kann nicht in einen einfachen Ausdruck konvertiert werden). In Java würde ich einfach tun

class MyClass {
    static int myDatum;

    static {
        /* do some computation which sets myDatum */
    }
}

Wenn ich mich nicht irre, lässt C ++ solche statischen Codeblöcke nicht zu, oder? Was soll ich stattdessen tun?

Ich hätte gerne eine Lösung für beide der folgenden Optionen:

Die Initialisierung erfolgt beim Laden des Prozesses (oder wenn die DLL mit dieser Klasse geladen wird).Die Initialisierung findet statt, wenn die Klasse zum ersten Mal instanziiert wird.

Bei der zweiten Option dachte ich an:

class StaticInitialized {
    static bool staticsInitialized = false;

    virtual void initializeStatics();

    StaticInitialized() {
        if (!staticsInitialized) {
            initializeStatics();
            staticsInitialized = true;
        }
    }
};

class MyClass : private StaticInitialized {
    static int myDatum;

    void initializeStatics() {
        /* computation which sets myDatum */
    }
};

Dies ist jedoch nicht möglich, da C ++ (derzeit?) die Initialisierung von nicht konstanten statischen Elementen nicht zulässt. Aber zumindest reduziert dies das Problem eines statischen Blocks auf das der statischen Initialisierung durch Ausdruck ...

Antworten auf die Frage(6)

Ihre Antwort auf die Frage