我刚刚发现了bost :: property_tree,我真的很喜欢我可以让用户通过编辑配置文件配置应用程序,以及在应用程序运行时通过选项更改变量,并且我可以保存更改配置回到文件。
我可以简单地加载变量:
int foo = boost::property_tree::get<int>("foo", 5);
并将变量保存回属性树
boost::property_tree::put<int>("foo", foo);
这在简单的项目中很简单,但在大项目中我想:
不需要一些全局加载/保存函数,这些函数必须包含需要使用属性值的程序的所有部分的自定义保存/加载函数(出于显而易见的原因)。
我可以想象像
这样的东西class ExtendedPropertyTree : public boost::property_tree
{
.. (some container of bindings) ... binded variables;
void saveAll();
void reload();
...
};
template <class T>
class PropertyBinding
{
...
std::string propertyIdentification;
T& value;
ExtendedPropertyTree& propertyTree;
... // alternatively pointer to before/after update function
... // alternatively default value
... // Constructor/Destructor would register/unregister this instance in the ExtendedProperted Tree automatically
};
必须定义一些合并冲突的方法(当程序和配置文件中的属性文件重新加载的值时)。
此时我觉得,就像我重新发明轮子一样,有没有办法在不制作这样的自定义类的情况下做到这一点?