Boots's property_tree kütüphanesini kullanıyorum. ptree
nesnesinden bir çocuk düğümü almak için bir yol arıyorum, ancak başarısız olursa boş bir ptree
döndürün. Ben property_tree/örneklerle/empty_ptree_trick.cpp güzel bir örnek geldi: tam olarak neye ihtiyacım yoknerede 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;
}
. Sorun, derleyicinin empty_ptree()
işlevinin boost:property_tree
üyesi olmadığından şikayet etmesidir. empty_ptree()
'un nerede olduğu hakkında bir fikir var mı?
VS2010'da 1.44 desteğini kullanıyorum.
@expelleboy - çaba için teşekkürler :-). Bununla birlikte, önerilen kodunuzla ilgili birkaç sorun vardır: 1) 'read_xml' de atabilir - böylece 'try' bloğuna koymak isteyebilirsiniz. 2) get_child tarafından döndürülen ptree'nin ömrünün ne olduğundan emin değilim, ancak, destekleme içindeki örnekler her zaman sonucu <> alsın ve asla adreslerini alamaz. Sarkan bir işaretçi ile sonuçlanabilir. 3) 'try-catch' komutunu atlayabilirsiniz. <> (Catch bloğunuzda kullanılan) isteğe bağlı sürümü, asla atmaz. 4) empty_ptree'ye bir referansı oluşturmaktan daha fazla vermektir. – bavaza
@bavaza np. Aslında bu sorunlarla uğraştığım bir sınıf (xml_branch kodumda) oluşturarak, yalnızca xml_branch'i miras alan bir sınıf içinde veya bir ptree'ye bir işaretçi oluşturmak için beni zorluyordu. Kök sınıf daha sonra gerçek ptree ve işaretçisine sahiptir. Sonra kök, üye xml_branch'sinin başlatılması üzerine ortaya çıkan tüm istisnaları işler. Maalesef size tam kaynağı gösteremiyorum, ancak bunu yapmanın oldukça zarif bir yolunu söyleyebilirim. – expelledboy
Maalesef "şube tüm istisnaları işliyor ..." demek istemiştim, ama yorumumu düzenleyemiyorum .. – expelledboy