我有课程配置:
class Config
{
public:
Config();
~Config();
void Read();
CData var; //CData - some config structure
};
从其他类访问值的正确方法是什么?有几个选择:
在我的系统中,90%的课程都需要config.var.some
。
答案 0 :(得分:3)
3)你可以使用静态,这基本上就像是使它成为全局的。
class Config
{
public:
static CData var; //CData - some config structure
static CData Read();
};
//these in a cpp file
CData Config::var = Config::Read();
int main() {
std::cout << Config.var.something;
}
但在这种情况下,最好只让var
本身全局化。
答案 1 :(得分:1)
第三种方式:将访问者函数添加到Config
类。
class Config
{
public:
Config();
~Config();
void Read();
int getNumberOfFooBars() const { return var.foo_bars; }
private:
CData var; //CData - some config structure
};
答案 2 :(得分:1)
我通常会将这样的对象作为参考传递而不是懒惰并使其成为全局。如果传递对象,那么通过查看构造函数/成员初始化列表,很明显哪些类将使用该对象。相反,将其设为全局(作为单身或其他)会使您或其他人难以一目了然地看到哪些类需要该对象。
向配置类添加访问者函数,允许其他对象通过定义的接口访问其成员。这将允许您更改类的内部,而不会破坏与config类接口的代码。