2013-05-11 62 views
0

我目前有一个头文件,其中定义了20多个头文件。这些定义设置了各种对象的属性。现在我必须将这些定义移动到一个配置文件中,以便在其中一个值发生更改时不必重新构建整个项目。我目前正在考虑有一个静态类,它的静态属性是通过从配置文本文件中读取来设置的。有更好的方法去吗?我知道我将不得不编写一个完整的文本解析器来检查文本文件中的键值,然后填充值。还有其他方法吗?检索地图值对的建议?将头文件迁移到配置文件

+0

使用库以JSON或CSV等通用格式构建,导出和导入这些文件。 – ApplePie 2013-05-11 03:05:36

+0

解析器听起来像是矫枉过正,如果您在编译时知道必须设置什么值。为什么有一个静态类作为配置文件和值之间的中间人? – Beta 2013-05-11 03:05:42

+0

您可以将您的配置保存为结构化二进制数据文件。 – Bechir 2013-05-11 03:12:43

回答

2

如果你在Windows上,一个ini文件和GetPrivateProfileString是快速和肮脏的。

2

如果您只是试图通过最小化重新编译来加速构建,则不需要编写自己的解析器。你可以用C++编写配置。

将参数声明放入包含文件中。

/* config.hpp */ 
class config 
    { 
public: 
    static const int PARAM1; 
    static const std::string PARAM2; 
    static const double PARAM3; 
    }; 

当需要更改配置时编辑并重新编译以下C++文件。

/* config.cpp */ 
const int config::PARAM1 = 1234; 
const std::string config::PARAM2 = "hello"; 
const double config::PARAM3 = sin(M_PI/4); 
+0

我迁移到配置文件的目的是为了避免重新编译文件。该exe只是从配置文件中读取 – MistyD 2013-05-11 03:55:55

+0

@MistyD:我的解决方案将使您能够避免重新编译所有依赖文件。它只会立即重新编译'config.cpp'。如果你有一个巨大的项目,而你实际上正在试图避免编译*和*链接,那么事情会变得更复杂一些。 – nobar 2013-05-11 04:00:43

+0

它不是关于重新编译它关于cpp文件的一个exe无关 – MistyD 2013-05-11 04:03:56