如何组织输入全局变量?
How do I organize input global variables?
在一些空闲时间,我正在编写一些物理模拟代码,所以我 a) 有一个框架可以在未来构建,并且 b) 让自己对 C++ 保持新鲜。我有几个程序几乎每个部分都需要的值(光速、盒子大小、粒子数量等),但我真的很想让用户能够在 input.cfg 文件(所以像 #DEFINE
+ constants.h
文件这样的东西是行不通的)。我当然可以很好地读取这些值,但是 conventional/best 使它们在许多不同模块中可用的方法是什么?
为什么不创建一个 struct
或 class
来包含这些并具有检索或更新配置的当前状态的函数,而不是一堆不相关的全局变量?
例如,作为 struct
,您可以实现序列化方法来读取或写入 .cfg
类型的文件。
那也可以实现一个静态方法到return活动配置,所以全局方法在实现中引用局部变量。
单例怎么样:
class Universe {
private:
Universe();
public:
static Universe& GetInstance();
void Reload();
double GetSpeedOfLight() const { return m_C; }
...
private:
double m_C; //!< Speed of light
};
Universe& Universe::GetInstance() {
static Universe instance;
return instance;
}
Universe::Universe() {
Reload();
}
void Universe::Reload() {
// load your constants
}
在一些空闲时间,我正在编写一些物理模拟代码,所以我 a) 有一个框架可以在未来构建,并且 b) 让自己对 C++ 保持新鲜。我有几个程序几乎每个部分都需要的值(光速、盒子大小、粒子数量等),但我真的很想让用户能够在 input.cfg 文件(所以像 #DEFINE
+ constants.h
文件这样的东西是行不通的)。我当然可以很好地读取这些值,但是 conventional/best 使它们在许多不同模块中可用的方法是什么?
为什么不创建一个 struct
或 class
来包含这些并具有检索或更新配置的当前状态的函数,而不是一堆不相关的全局变量?
例如,作为 struct
,您可以实现序列化方法来读取或写入 .cfg
类型的文件。
那也可以实现一个静态方法到return活动配置,所以全局方法在实现中引用局部变量。
单例怎么样:
class Universe {
private:
Universe();
public:
static Universe& GetInstance();
void Reload();
double GetSpeedOfLight() const { return m_C; }
...
private:
double m_C; //!< Speed of light
};
Universe& Universe::GetInstance() {
static Universe instance;
return instance;
}
Universe::Universe() {
Reload();
}
void Universe::Reload() {
// load your constants
}