Что такое идиома 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 ++ (на данный момент?) не позволяет инициализировать неконстантные статические члены. Но, по крайней мере, это сводит проблему статического блока к проблеме статической инициализации выражением ...