Boost属性树中的自动类型

时间:2011-10-14 20:32:51

标签: c++ boost boost-propertytree

目前我有这段代码:

if(!variables["width"].defaulted())
{
    configTree.put(treeNames["width"], variables["width"].as<int>());
}

if(!variables["height"].defaulted())
{
    configTree.put(treeNames["height"], variables["height"].as<int>());
}

if(!variables["fullscreen"].defaulted())
{
    configTree.put(treeNames["fullscreen"], variables["height"].as<int>());
}

我正在努力做到这一点。唯一阻止我的是,我将来也会有std :: string变量,这意味着只需循环遍历所有值并使用as()不会起作用。

我曾考虑尝试将boost :: any用作&lt;&gt;(),但这不起作用(加载模板错误)。我还考虑过一个带有值的元组,指定它将是什么类型,然后切换它并调用适当的&lt;&gt;(),但这似乎有点矫枉过正。

有没有办法简单地说这个?

1 个答案:

答案 0 :(得分:1)

template<class T> void xput(const char* name) {
    if(!variables[name].defaulted())
        configTree.put(treeNames[name], variables[name].as<T>());
}

xput<int>("width");
xput<int>("height");
xput<int>("fullscreen");
xput<std::string>("future-option");

如果您想要实现运行时多态性,请将上述函数转换为仿函数并将其指定给boost :: function。