如何组织输入全局变量?

How do I organize input global variables?

在一些空闲时间,我正在编写一些物理模拟代码,所以我 a) 有一个框架可以在未来构建,并且 b) 让自己对 C++ 保持新鲜。我有几个程序几乎每个部分都需要的值(光速、盒子大小、粒子数量等),但我真的很想让用户能够在 input.cfg 文件(所以像 #DEFINE+ constants.h 文件这样的东西是行不通的)。我当然可以很好地读取这些值,但是 conventional/best 使它们在许多不同模块中可用的方法是什么?

为什么不创建一个 structclass 来包含这些并具有检索或更新配置的当前状态的函数,而不是一堆不相关的全局变量?

例如,作为 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
}