在开发时更改const值而不重新编译所有内容

时间:2011-03-01 19:38:36

标签: c++ file-io settings

现在我有大量存储在常量中的魔术数字。这些在每个构建之间进行了大量调整。例如const int numAPPLES = 25

现在这些都是在每个相关类头的顶部定义的。但有时候他们需要分享,而我必须要么:

  1. 复制定义;和风险冲突的价值
  2. 包含额外标题(这就是我所做的)
  3. 我以前把它们全部放在options.h中,这很好,因为我可以一起看到它们但是改变数字显然会触发完全重建。

    如果重要的话我正在使用VS 2010。

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

    数据类型(目前仅)charint

    我也不希望只有访问它们的整个库依赖。但是一个简单的推荐课程;或者建立自己的方式会很棒。

    谢谢!


    编辑: 这对你们好吗?http://www.codeproject.com/KB/cpp/IniReader.aspx

3 个答案:

答案 0 :(得分:9)

如果在编译时需要常量,则必须在更改时重新编译。

如果您只需要运行时的值,则可以将它们声明为

extern const int numAPPLES;

并将实际值放在单独的.cpp文件中。更改值时,只需重新编译该文件即可。

答案 1 :(得分:2)

您是否考虑过使用在运行时读取的.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;

干杯

答案 2 :(得分:1)

回答编辑:不,it看起来不太好。什么是魔法255分散在整个代码?它是C ++代码,那么char *字符串在那里做什么?

我想如果它按原样编译并且你能够立即将它集成到你的代码中,它会很有用。然后,当您对它感到满意时,您可以保持界面并重写方法以保证清晰度和安全性。

但我建议你看看一些图书馆,第一个出现在我脑海中的是Boost.Program_options