C++ 在开发时更改常量值而不重新编译所有内容

C++ 在开发时更改常量值而不重新编译所有内容,c++,file-io,settings,C++,File Io,Settings,现在,我有大量的可能是幻数存储在常量中。在每次构建之间,这些都会进行很多调整。例如const int numaples=25 现在,这些都是在每个相关类标题的顶部定义的。但有时它们需要共享,我甚至不得不: 复制定义;风险和价值冲突 包括额外的标题(这是我所做的) 我以前把它们都放在options.h中,这很好,因为我可以同时看到它们,但是更改一个数字显然会触发一个完整的重建 如果重要的话,我正在使用VS2010 允许更改这些数字的最佳方式是什么?我想知道如何将.txt文件添加到我的VS项目中,然

现在,我有大量的可能是幻数存储在常量中。在每次构建之间,这些都会进行很多调整。例如
const int numaples=25

现在,这些都是在每个相关类标题的顶部定义的。但有时它们需要共享,我甚至不得不:

  • 复制定义;风险和价值冲突
  • 包括额外的标题(这是我所做的)
  • 我以前把它们都放在
    options.h
    中,这很好,因为我可以同时看到它们,但是更改一个数字显然会触发一个完整的重建

    如果重要的话,我正在使用VS2010

    允许更改这些数字的最佳方式是什么?我想知道如何将.txt文件添加到我的VS项目中,然后从中提取变量。

    数据类型(目前)仅为
    char
    int

    我也不想仅仅为了访问它们而拥有整个库的依赖性。但是一个简单的推荐类;或者用这种方法来建造自己的房子会很好

    谢谢


    编辑:
    你们觉得这样好吗?:

    你们考虑过使用运行时读取的.ini文件来存储所有这些常量吗? 然后可以使用
    GetPrivateProfileInt
    /
    GetPrivateProfileString
    读取这些文件。根据我的经验,在Windows下处理您的情况是一种非常常见的方法

    下面是一个简单的Try.ini文件示例:

    ..
    [Section1]
    Const1 = 1
    ..
    
    还有代码窃贼:

    CString FileName = _T("Try.ini");
    int Value = GetPrivateProfileInt( "Section1", "Const1", DEFAULT_ERROR, FileName );
    if( Value == DEFAULT_ERROR)
      return ERROR;
    

    干杯

    如果您在编译时需要这些常量,那么当它们发生变化时,您确实需要重新编译

    如果您只需要在运行时使用这些值,那么可以将它们声明为

    extern const int numAPPLES;
    
    并将实际值放入单独的.cpp文件中。当您更改一个值时,只需重新编译该文件。

    编辑回答:不,看起来不太好。那些散布在代码中的魔法是什么?它是C++代码,那么char字符串在那里做什么?< /P> 我想如果它按原样编译,并且您能够立即将其集成到代码中,它可能会很有用。然后,当您对它感到满意时,您可以保留接口并重写方法,以确保清晰和安全


    但我建议你看看一些库,我脑海中浮现的第一个库是。

    这会与使用txt不同/更简单吗?…请转到谷歌了解这一点。。编辑:搜索.ini的结果比搜索“write to txt”的结果要好得多!是的,总的来说比“从头开始”阅读一个文件要容易得多,请参见我之前编辑的答案,以获取一个示例。当我构建UI并需要保存用户更改时,我肯定会记住这一点。问题标题似乎令人困惑。您似乎并不想在编译时更改它们,而是想在编译后和预运行时更改它们。。。。或者你甚至可以在程序启动时读取它们,而不重新编译任何东西。@Suma你能详细说明一下吗?你是说用ini还是别的什么?另外,使用
    extern
    不需要包含?据我所知,情况似乎是这样。是的,您可以从配置文件中读取它们。它可能是ini,也可能是Yaml,Json,任何你能够轻松解析的东西。Boost.Program_选项提供了一个灵活的解决方案。请注意,这将使您能够仅在运行时声明和使用常量。
    extern
    常量不能在任何翻译单元中用作编译时常量,除了实际定义值的翻译单元。感谢您的确认,我觉得它看起来很尴尬