使用Boost`ptree.find`不能按预期工作

时间:2014-02-26 12:39:54

标签: c++ boost

我有

const boost::property_tree::ptree& v

我希望得到<xmlattr>.Value,如果它存在,否则得到值。

我试过这段代码:

if(v.find("<xmlattr>.Value") != v.not_found())
    value = v.get<std::string>("<xmlattr>.Value");
else
    value = v.get_value<std::string>();

但是,它没有按预期工作。即使值存在,find()也会返回not_found()

此代码有效:

auto inValue = v.get_optional<std::string>("<xmlattr>.Value");
if(inValue.is_initialized())
    value = inValue.get();
else
    value = v.get_value<std::string>();

我想我理解find()错了。它到底是做什么用的?我应该使用另一种功能吗?

1 个答案:

答案 0 :(得分:1)

根据文档,find()(see here)查找具有给定键(不是路径)的子项,如果没有,则查找not_found()。

<xmlattr>.Value是一条路径(适用于getget_optional)。