gpt4 book ai didi

boost-propertytree - boost property_tree::empty_ptree 在哪里?

转载 作者:行者123 更新时间:2023-12-04 21:50:52 25 4
gpt4 key购买 nike

我正在使用 boots 的 property_tree 库。我正在寻找一种从 ptree 获取子节点的方法对象,但返回一个空 ptree如果失败。我在 property_tree/examples/empty_ptree_trick.cpp 中遇到了一个很好的例子:

void process_settings(const std::string &filename)
{
ptree pt;
read_info(filename, pt);
const ptree &settings = pt.get_child("settings", empty_ptree<ptree>());
std::cout << "\n Processing " << filename << std::endl;
std::cout << " Setting 1 is " << settings.get("setting1", 0) << std::endl;
std::cout << " Setting 2 is " << settings.get("setting2", 0.0) << std::endl;
std::cout << " Setting 3 is " << settings.get("setting3", "default") << std::endl;
}

这正是我需要的。问题是编译器提示 empty_ptree()函数不是 boost:property_tree 的成员.任何想法 empty_ptree()是?

我在 VS2010 上使用 boost 1.44。

最佳答案

我刚刚花了一整天试图回答这个问题!

这是我的解决方案。首先我使用指针,而不是引用,因为你必须立即初始化它们。然后我刚刚捕获了异常并添加了一个新的 ptree。

using namespace boost::property_tree;

ptree r_pt;
ptree *c_pt;

read_xml( "file.xml" , r_pt);

try {
c_pt = &(r_pt.get_child( "example" ));
}
catch (ptree_bad_path) {
c_pt = &(r_pt.put_child( "example", ptree() ));
}

std::cout << "Setting 1 is " << c_pt.get("setting1", 0) << std::endl;

据我所知,他们希望我们使用 boost::optional 类型。但我只是一个初学者..

编辑
我刚刚找到了 empty_ptree<> 的实现。
template<class Ptree>
inline const Ptree &empty_ptree()
{
static Ptree pt;
return pt;
}

我认为您可以将它添加到您的代码中并按照 empty_ptree_trick.cpp 中的描述使用它,但我现在坚持使用我的解决方案,直到我发现它实际上应该如何完成。

关于boost-propertytree - boost property_tree::empty_ptree 在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com