У меня есть класс с некоторыми статическими членами, и я хочу запустить некоторый код для их инициализации (предположим, что этот код не может быть преобразован в простое выражение). В Java я просто делал
class MyClass {
static int myDatum;
static {
/* do some computation which sets myDatum */
}
}
Если я ошибаюсь, С++ не допускает таких статических блоков кода, правильно? Что я должен делать вместо этого?
Мне нужно решение для обоих следующих параметров:
- Инициализация происходит при загрузке процесса (или когда 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 */
}
};
но это невозможно, так как С++ (на данный момент?) не позволяет инициализировать непостоянные статические члены. Но, по крайней мере, это уменьшает проблему статического блока до статической инициализации с помощью выражения...