我应该在哪里存储项目常量 definition/declaration

Where should I store project constants definition/declaration

我有一个项目,例如游戏应用程序。我有很多 classes 在那里。那么,我应该在哪里存储游戏参数的初始变量declaration/definition?

例如,我有一个'plane',它有初始参数speedheight、e.t.c.
游戏开始后,此参数在某种程度上取决于游戏进程,并且及时更改参数我也应该存储在一些文件中。
与另一个 classes 相同的情况,例如初始 score/fuel/health... 还有一些 constexpr 参数,例如每秒增加的分数数量。

那么,我应该将所有这些参数存储在哪里?我对此有一些想法:

  1. 如果我将其存储在 Parameters.h 文件中,例如:
namespace WINDOW_PARAM {
    static const unsigned int WIDTH = 1000;
    static const unsigned int HEIGHT = 1000;
}
namespace PLANE_PARAM {
    static const char *TEXTURE_PATH = "../example.png";
}

那我的编译时间就太长了。那是因为一些 classes 包含这个文件,如果我测试 best-parameters 我会修改它,它会太长。

  1. 另一种方法 - 创建配置文件并以某种方式从中解析。这将减少编译时间并且易于修改,但在架构情况下似乎很难,因为会有很多依赖关系。
  2. 只需在每个 class 中声明每个常量即可。 - 修改时间太长,因为我应该打开 Plane.h - 修改,然后 Window.h .. e.t.c

大型项目游戏如何解决这个问题(这意味着它们是 testing/developed - 应该少构建并保持简单的架构)?在下面的答案中使用 extern 是个好习惯吗?

您可以在 header 中将变量声明为 extern,并使 .cpp 具有实际值。

Parameters.h

namespace WINDOW_PARAM {
    extern const unsigned int WIDTH;
    extern const unsigned int HEIGHT;
}
namespace PLANE_PARAM {
    extern const char *TEXTURE_PATH;
}

Parameters.cpp

namespace WINDOW_PARAM {
    const unsigned int WIDTH = 1000;
    const unsigned int HEIGHT = 1000;
}
namespace PLANE_PARAM {
    const char *TEXTURE_PATH = "../example.png";
}

现在您可以#include "Parameters.h"无处不在。更改 Parameters.cpp 中的值只会重新编译该文件。