5个答案
optional<const-ptree&>child=node.get_child_optional(“possible_missing_node”); if(!child) { //缺少子节点 }
-
-
为了安全。 读取配置时,几乎没有理由修改值。 快速搜索显示,ptree仍然有一个get_child_optional重载(在boost 1.61.0中),该重载返回可选的<const ptree&>,因此您的错误将与随后对该值所做的操作有关。 – 罗布(RobH) 评论 2016年9月19日10:33 -
1
if(node.count(“possibiliy_missing”)==0) { ... } ptree::constassoc_iterator it=ptree.find(“possible_missing”); if(它==ptree.not_found()) { ... }
-
三 -
1 我发现有趣的是,与get<>方法不同,find方法不支持find(“SubNode.Attribute”)。 您必须手动获取ptree中的SubNode子节点,并在子实例上运行find, – 窒息 评论 2015年11月10日10:21 -
2 node.count也不适用于嵌套键,例如“child.subchild”。 到目前为止,我发现唯一有效的是node.get_child_optional,如下面的答案所示 stackoverflow.com/a/25389349/844728 – 格雷格·克拉米达 评论 2019年11月14日10:26 -
#包括<boost/optional/optional.hpp>
boost::可选<ptree&>child=node.get_child_optional(“possibly_missing_node”); if(!child) { //缺少子节点 }
if(node.begin()!= node.end()){//节点没有子节点[ren] //用于处理子节点的代码 }
typedef boost::属性树pt; pt::ptree树; pt::read_xml(文件名,树); int bodyCount=tree.count(“body”); if(bodyCount==0) { cout<<“Failed:body tag not found”<<endl; 返回-1; }