将C ++变量自动绑定到boost的属性树值的标准方法

时间:2012-04-26 13:37:40

标签: c++ boost properties

我刚刚发现了bost :: property_tree,我真的很喜欢我可以让用户通过编辑配置文件配置应用程序,以及在应用程序运行时通过选项更改变量,并且我可以保存更改配置回到文件。

我可以简单地加载变量:

int foo = boost::property_tree::get<int>("foo", 5);

并将变量保存回属性树

boost::property_tree::put<int>("foo", foo);

这在简单的项目中很简单,但在大项目中我想:

  • 根据程序中变量的当前值保存所有配置
  • 当某个绑定变量的生命周期结束时,自动(或者)更新property_tree对象。
  • 重新加载属性文件并根据请求更新程序中的所有值。

不需要一些全局加载/保存函数,这些函数必须包含需要使用属性值的程序的所有部分的自定义保存/加载函数(出于显而易见的原因)。

我可以想象像

这样的东西
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
};

必须定义一些合并冲突的方法(当程序和配置文件中的属性文件重新加载的值时)。

此时我觉得,就像我重新发明轮子一样,有没有办法在不制作这样的自定义类的情况下做到这一点?

0 个答案:

没有答案