我们如何在 boost 属性树中获取对象
Posted
技术标签:
【中文标题】我们如何在 boost 属性树中获取对象【英文标题】:How do we get objects in boost property tree 【发布时间】:2012-08-10 12:52:15 【问题描述】:我需要了解和修改示例代码。我被困在某个时候,找不到任何解决方案。代码如下:
void foo(std::istream& input)
using boost::property_tree::ptree;
ptree pt;
boost::property_tree::read_json(input, pt);
BOOST_FOREACH(ptree::value_type &node, pt.get_child("some_nodes"))
std::string id;
unsigned int number1;
bool flag1;
bool flag2;
id = node.second.get<std::string>("id");
number1 = node.second.get<unsigned int>("number1");
flag1 = node.second.get<bool>("flag1");
flag2 = node.second.get<bool>("flag2");
谁能告诉我这里的“第二”是什么意思?
这是程序读取的 JSON 示例:
"some_nodes" :
[
"id" : "vader",
"number1" : "1024",
"flag1" : "false",
"flag2" : "true",
,
"id" : "anakin",
"number1" : "4096",
"flag1" : "true",
"flag2" : "true",
]
还有一个问题,当我尝试编译代码时,我也收到以下错误。这是什么意思,我该如何解决?
Invalid arguments '
Candidates are:
boost::foreach_detail_::foreach_reference<#0,#1>::type deref(const boost::foreach_detail_::auto_any_base &, boost::foreach_detail_::type2type<#0,#1> *)
'
非常感谢。
【问题讨论】:
这将有助于发布 xml/json/无论此代码读取的示例。 【参考方案1】:ptree::value_type 是这样定义的:
typedef std::pair< const Key, self_type > value_type;
所以它只是一个 std::pair。 JSON 的根节点是数组“some_nodes”。 当你迭代你的属性树时,你正在迭代所有的“some_nodes”子节点。
第一个字段是键(在这种情况下是隐式的,因为您正在迭代所有根子节点)。我想在你的情况下 node.first 总是“some_nodes”。 second 是值(键的子节点:另一个 ptree)。在这种情况下,在每次迭代中,第二个都是数组的第 i 个未命名对象。【讨论】:
我对 JSON 不熟悉,所以我希望我说的是对的。我只将它与 XML 一起使用。在每一层,第一个元素是父节点,第二个元素是它的一个子节点。以上是关于我们如何在 boost 属性树中获取对象的主要内容,如果未能解决你的问题,请参考以下文章
在源码树中获取 boost:shared_ptr 的 get 方法的所有使用列表
如何从 boost::interprocess::managed_shared_memory 对象中获取 shmid