【发布时间】:2016-08-02 13:23:07
【问题描述】:
我目前有一个从配置文件加载变量的函数。它使用这些来初始化一组常量配置变量。
// header file
namespace cfg {
extern const char *config_value;
}
// source file
namespace cfg {
const char *config_value;
}
bool load_config() {
cfg::config_value = load_config_line("config_value");
}
const char *load_config_line(const char *key) {
// read value from config.cfg...
}
这很好用。问题是现在我想在其他几个项目中重用这段代码,这意味着常量值必须改变。这意味着在代码中的四个不同位置更改config_value 名称。这也意味着我有几个基本相同的代码副本要在不同的项目中维护。
有没有办法使用相同的代码来设置不同的常量值集以进行读取和解析?也许我所要做的就是更改头文件,它会自动找到这些值配置文件中的名称?棘手的部分是理想情况下,面向外部的配置值本身应该是恒定的并且在编译时可用(例如,使用字符串到值映射是不可取的,因为我希望有编译时保护) .
【问题讨论】:
-
您应该使用已经实现的“序列化程序”并将数据存储和重新加载到结构/类实例,而不是重新发明轮子并处理全局变量。
-
@Klaus 抱歉,您能否详细说明“序列化程序”?
-
请使用您最喜欢的搜索引擎 :-) 有很多库提供了从 c++ 数据结构读取/写入数据到文件/网络/数据库的方法。 boost.org/doc/libs/1_59_0_b1/libs/serialization/doc/index.html