¿Cuál es el lenguaje C ++ equivalente al bloque estático de Java?

Tengo una clase con algunos miembros estáticos y quiero ejecutar un código para inicializarlos (suponga que este código no se puede convertir en una expresión simple). En Java, yo solo haría

class MyClass {
    static int myDatum;

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

A menos que esté equivocado, C ++ no permite tales bloques de código estático, ¿verdad? ¿Qué debería estar haciendo en su lugar?

Me gustaría una solución para las dos opciones siguientes:

La inicialización ocurre cuando se carga el proceso (o cuando se carga la DLL con esta clase).La inicialización ocurre cuando se crea una primera instancia de la clase.

Para la segunda opción, estaba pensando en:

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 */
    }
};

pero eso no es posible, ya que C ++ (¿en este momento?) no permite la inicialización de miembros estáticos no constantes. Pero, al menos eso reduce el problema de un bloque estático al de la inicialización estática por expresión ...

Respuestas a la pregunta(6)

Su respuesta a la pregunta