返回信息流类里有一个成员变量,它被所有该类对象共享,该变量是程序启动时从文件中读入的,当读入值以后就不能再修改它了,而我又不希望从该类的初始化列表中初始化,因为程序启动时还不想创建该类对象。不知道定义成什么类型好。
const static 貌似不行,因为它必须在类.cpp中定义。光const又要从初始化列表中初始化。光static又可能会被随便修改。
这是一条镜像帖。来源:北邮人论坛 / cpp / #32279同步于 2009/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
这样的数据类型怎么写?
wqchen
2009/11/27镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
那就把不同类的变量定义成不同的单件类咯,可以把单件类作为这个类的私有成员类,外面是看不到的 呵呵
【 在 wqchen 的大作中提到: 】
: 1楼的方法确实应该可行,不过这样就必须把本来属于不同类的变量都交由那个单件类管理了,我还是想把这些变量分散在各个类中。
做成私有类后也只有在该类中才能初始化了吧?可能我的问题描述的不清楚。
我想了想,用个Flag标识一下就可解决,这里的数据肯定要声明为static,而各个类中的这些static数据又要让一个统一的类(Init)来赋值,其实就是限制这些static成员只能被改写一次。那么在Init中设一个static bool isNULL = true ; 表示可改写,改写调用各个类的Set方法,该方法检查Init::isNULL是否为true。一旦从文件中读入数据后,将isNULL设为false. 这样具体的各个类中如果再调用Set方法时,因为isNULL == false而拒绝再次对static成员赋值即可。
[size=4]class MemberToBeChanged{
private:
static int i; //要被Init改变的static成员
public:
static void Set(int i){
if( Init::isNULL )
this->i = i;
}
};
class Init{ //这个类也只会被使用一次
public:
static bool isNULL = true;
static void change(){
if( !isNULL )
return;
int i = 10 ;
A::Set(i);
isNULL = false; //修改完后,关门,不准再次打开
}
};【 在 pb03000804 的大作中提到: 】
: 那就把不同类的变量定义成不同的单件类咯,可以把单件类作为这个类的私有成员类,外面是看不到的 呵呵
[/size]