我有一个静态成员的类,我想运行一些代码来初始化它们(假设这个代码不能转换成一个简单的表达式)。在Java中,我只会这样做
class MyClass {
static int myDatum;
static {
/* do some computation which sets myDatum */
}
}
除非我错了,否则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 */
}
};
但这是不可能的,因为C ++(目前?)不允许初始化非常量静态成员。但是,至少可以通过表达式将静态块的问题减少到静态初始化的问题......
发布于 2018-03-26 11:03:50
你可以用C ++初始化静态数据成员:
#include "Bar.h"
Bar make_a_bar();
struct Foo
{
static Bar bar;
};
Bar Foo::bar = make_a_bar();
你可能不得不考虑翻译单元之间的依赖关系,但这是一般的方法。
https://stackoverflow.com/questions/-100004303
复制相似问题