我正在嘗試編寫XML解析器,將XML文件解析爲boost::property_tree
,並且遇到了此問題。我如何檢查(快速)某個財產的孩子是否存在?Boost PropertyTree:檢查孩子是否存在
很明顯,我可以迭代所有使用BOOST_FOREACH
的孩子 - 但是,沒有更好的解決方案嗎?
我正在嘗試編寫XML解析器,將XML文件解析爲boost::property_tree
,並且遇到了此問題。我如何檢查(快速)某個財產的孩子是否存在?Boost PropertyTree:檢查孩子是否存在
很明顯,我可以迭代所有使用BOOST_FOREACH
的孩子 - 但是,沒有更好的解決方案嗎?
optional< const ptree& > child = node.get_child_optional("possibly_missing_node");
if(!child)
{
// child node is missing
}
這裏有一對夫婦的其他替代方案:
if(node.count("possibliy_missing") == 0)
{
...
}
ptree::const_assoc_iterator it = ptree.find("possibly_missing");
if(it == ptree.not_found())
{
...
}
包含此:
#include <boost/optional/optional.hpp>
刪除const
:
boost::optional< ptree& > child = node.get_child_optional("possibly_missing_node");
if(!child)
{
// child node is missing
}
爲了得到你的榜樣工作,我不得不刪除了「常量」 - 你能解釋一下你爲什麼用「常量' 這裏 ? – serup
爲了安全起見。在閱讀配置時,可能沒有理由修改值。快速搜索表明,ptree仍然具有(在boost 1.61.0中)一個get_child_optional重載,該重載返回可選的,所以你的錯誤將與隨後對值做什麼有關。 –
RobH