我正在使用C ++,并且正在创建一个ex_stage
类(SystemC模块,如果它有任何区别)。在该类的头文件中,我定义:
public:
ReorderBuffer ROB;
ReorderBuffer
是另一个我定义的类,它有自己的构造函数。我已将ROB
定义为ex_stage
类的全局变量,以便可以从ex_stage
内的多个函数访问它。
但是,我无法在运行时初始化ROB
,因为它依赖于用户提供的某些功能值。因此,即使我将ROB
定义为全局变量,我也无法在定义它的位置初始化它。
通常情况下,我会这样做:
ReorderBuffer ROB(<incoming variables>);
在ex_stage
的构造函数中同时构造ROB
。但是,由于我已经定义了ROB
,我不确定我是否能够在不引起问题的情况下这样做。
执行这样的操作会不会影响原始范围内的ROB
,还是会创建一个新的ROB
,其范围是ex_stage
的构造函数的本地范围?
P.S。 - 对不起,如果这很难理解,如果您需要更多信息请告诉我。
答案 0 :(得分:0)
如果要初始化全局内容,则必须注意“Global initialization fiasco”。如果我是你,我会使用unnamed namespace来隐藏全局var指针并拥有一些全局函数(仅在命名空间中),例如InitMyGlobalVar()
,GetMyGlobalVar()
来初始化和检索指针。
答案 1 :(得分:0)
如果您知道在ROB
构造函数运行时如何初始化ex_stage
,您可能会发现member initializer有用。
成员初始值设定项允许以特定方式初始化类成员,而不是只调用其默认构造函数:
class ex_stage {
public:
ex_stage() : ROB(<stuff>) {} // constructor that takes <stuff> will be called
ReorderBuffer ROB; // default constructor will _not_ be called
};