Qual é o idioma do C ++ equivalente ao bloco estático de Java?

Eu tenho uma classe com alguns membros estáticos, e eu quero executar algum código para inicializá-los (suponha que este código não pode ser convertido em uma expressão simples). Em Java, eu apenas faria

class MyClass {
    static int myDatum;

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

A menos que eu esteja enganado, o C ++ não permite esses blocos de código estáticos, certo? O que eu deveria estar fazendo em vez disso?

Eu gostaria de solução para as duas opções a seguir:

A inicialização acontece quando o processo é carregado (ou quando a DLL com essa classe é carregada).A inicialização acontece quando a classe é instanciada pela primeira vez.

Para a segunda opção, eu estava pensando em:

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

mas isso não é possível, já que o C ++ (no momento?) não permite a inicialização de membros estáticos não-constantes. Mas, pelo menos isso reduz o problema de um bloco estático àquele da inicialização estática pela expressão ...

questionAnswers(6)

yourAnswerToTheQuestion