5
我使用靴子的property_tree庫。我正在尋找從ptree
對象獲取子節點的方法,但如果失敗,將返回空ptree
。我在property_tree/examples/empty_ptree_trick.cpp中遇到了一個很好的例子:哪裏是boost property_tree :: empty_ptree?
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。
@expelleboy - 感謝您的努力:-)。但是,你的代碼有一些問題:1)`read_xml`也可能拋出 - 所以你可能想把它放在`try`塊中。 2)我不確定`get_child`返回的ptree的壽命是多少,但boost中的例子總是從get <>分配結果,並且永遠不會獲取它們的地址。你最終可能會有一個懸掛指針。 3)你可以跳過`try-catch`,作爲get <>的可選版本(在catch塊中使用的版本),永遠不會拋出。 4)返回對empty_ptree的引用比創建它更有效。 – bavaza 2011-03-06 09:25:05