Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该在哪里存储项目常量定义/声明_C++_Constants - Fatal编程技术网

C++ 我应该在哪里存储项目常量定义/声明

C++ 我应该在哪里存储项目常量定义/声明,c++,constants,C++,Constants,我有一个项目,例如游戏应用程序。我在那里有很多课。那么,我应该在哪里存储游戏参数的初始变量声明/定义 例如,我有一个“平面”,它具有初始参数速度,高度,e.t.c. 在游戏开始后,这个参数在某种程度上取决于游戏过程,并且在时间参数上的变化我也应该存储在一些文件中。 其他类别的情况相同,例如初始分数/燃油/健康。。。 还有一些constexpr参数,如每秒增加分数的数量 那么,我应该在哪里存储所有这些参数呢?对此我有一些想法: 如果我将其存储在Parameters.h文件中,如下所示: 那我的编译

我有一个项目,例如游戏应用程序。我在那里有很多课。那么,我应该在哪里存储游戏参数的初始变量声明/定义

例如,我有一个“平面”,它具有初始参数
速度
高度
,e.t.c.
在游戏开始后,这个参数在某种程度上取决于游戏过程,并且在时间参数上的变化我也应该存储在一些文件中。
其他类别的情况相同,例如初始
分数
/
燃油
/
健康
。。。 还有一些
constexpr
参数,如每秒增加分数的数量

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

  • 如果我将其存储在
    Parameters.h
    文件中,如下所示:
  • 那我的编译时间就太长了。这是因为有些类包含这个文件,如果我测试最佳参数,我会修改它,它会太长

  • 另一种方法-创建配置文件并从中进行解析。这将减少编译时间并易于修改,但在体系结构情况下似乎很难做到,因为会有很多依赖项
  • 只需声明每个类中的每个常量修改时间太长,因为我应该打开
    Plane.h
    -modify,然后打开
    Window.h
    。。e、 t.c

  • 大型项目游戏如何解决这个问题(这意味着他们正在测试/开发-应该少构建并保持简单的架构)?像下面的答案一样使用
    extern
    是否是一种好的做法?

    您可以在标题中将变量声明为
    extern
    ,并使用带有实际值的
    .cpp

    参数

    namespace WINDOW_PARAM {
        extern const unsigned int WIDTH;
        extern const unsigned int HEIGHT;
    }
    namespace PLANE_PARAM {
        extern const char *TEXTURE_PATH;
    }
    
    参数.cpp

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

    现在,您可以在任何地方包含“Parameters.h”。更改
    参数.cpp
    中的值只会重新编译该文件。

    如果它们是经常更改的参数,那么#2是最好的方法。“我应该如何处理它”——这是相当主观的。有关如何使这个问题更具建设性的建议(例如,更多地关注优点和缺点)。@JaMiT现在可以了吗?@Hattedroster使用
    extern
    like作为答案是一种很好的做法?@Mike询问现有项目中做了什么比询问项目中应该做什么更好。因此,是的,有改进。但是,您的项目不是这些项目。如果您知道为什么做出这些选择,您将受益匪浅,这样您就可以评估这些原因是否适用于您的项目。使用
    extern
    真的是一种好的做法吗?当然是在
    名称空间中,但我有一些疑问。另外,在这种情况下使用
    constexpr
    根据我的经验,在所有情况下都应该谨慎使用globals。但对于常数,它有时是有意义的。一般来说,我不认为
    extern
    是个坏主意,但它有利弊。这里的优点是,您可以更改值,而无需重新编译依赖它们的TU。您已经指出的缺点,这也意味着编译器无法使用该值进行优化。我认为这取决于你的项目中什么更重要。
    namespace WINDOW_PARAM {
        const unsigned int WIDTH = 1000;
        const unsigned int HEIGHT = 1000;
    }
    namespace PLANE_PARAM {
        const char *TEXTURE_PATH = "../example.png";
    }