我有一个带有一些静态成员的类,我想运行一些代码来初始化它们(假设这段代码不能转换成简单的表达式).在Java中,我会这样做
class MyClass {
static int myDatum;
static {
/* do some computation which sets myDatum */
}
}
Run Code Online (Sandbox Code Playgroud)
除非我弄错了,C++不允许这样的静态代码块,对吧?我应该做什么呢?
我想要解决以下两个选项:
对于第二种选择,我在考虑:
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 */
}
};
Run Code Online (Sandbox Code Playgroud)
但这是不可能的,因为C++(目前?)不允许初始化非const静态成员.但是,至少可以通过表达式将静态块的问题减少到静态初始化的问题......