Что такое идиома C ++, эквивалентная статическому блоку Java?

У меня есть класс с некоторыми статическими членами, и я хочу запустить некоторый код для их инициализации (предположим, этот код нельзя преобразовать в простое выражение). На Java я бы просто сделал

class MyClass {
    static int myDatum;

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

Если я не ошибаюсь, C ++ не допускает такие статические блоки кода, верно? Что я должен делать вместо этого?

Я хотел бы получить решение для обоих следующих вариантов:

Инициализация происходит при загрузке процесса (или при загрузке DLL с этим классом).Инициализация происходит, когда класс создается впервые.

Для второго варианта я думал о:

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

но это невозможно, поскольку C ++ (на данный момент?) не позволяет инициализировать неконстантные статические члены. Но, по крайней мере, это сводит проблему статического блока к проблеме статической инициализации выражением ...

Ответы на вопрос(6)

Ваш ответ на вопрос