与Java静态块等效的C++习语是什么?
我有一个包含一些静态成员的类,我想运行一些代码来初始化它们(假设此代码无法转换为简单的表达式)。在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++(目前?)不允许初始化非const静态成员。但是,至少这减少了静态块的问题,即通过表达式进行静态初始化的问题......