Вы можете нарисовать свое дерево в виде:
node1 is tree (has 2 children, data() of tree is "")
|
|- (node2) pi ----> data=3.14...
|
|- (node3) name --> data="Joe Doe"
[1]
Как видно из дерева tree.get_value («что угодно») не возвращает значения
tree
является узлом и имеет 2 дочерних элементов (pi, имя).При вызове
tree.get_value(defaultValue) // you are not passing PATH, but DEFAULT VALUE
указанная выше строка преобразуется в
tree.get_child("").get_value(defaultValue)
, поэтому путь ""
существует, поскольку это путь к узлу tree
, а tree.data()
возвращает ""
- пустая строка для этого пути.Так что defaultValue
не может быть напечатано, и вы видите пустую строку в качестве вывода.Вы должны вызывать get_value
только для детей (используйте get_child
на tree
перед вызовом этого метида, это описано в расширенном справочнике), а параметр get_value
является значением по умолчанию.Поэтому заменить
std::cout << "pi : " << tree.get_child("pi").get_value("PI is 4.0") << "\n";
std::cout << "name : " << tree.get_child("name").get_value("noname") << "\n";
вы увидите, что 3.14
и Joe Doe
.
[2]
tree.get_value ("null") небросить исключение
описано в пункте [1].""
путь существует, а data()
для этого пути - пустая строка.Таким образом, вы не можете видеть null
строку в качестве значения по умолчанию.
[3]
// закомментированная строка не компилируется // std :: cout << "не найдено: "</p>
<< tree.get_value (" null ") <<" \ n "; </p>
Эта строка не может быть скомпилирована, так как класс ptree не имеет этого метода, яПредположим, вы хотите вызвать этот метод:
template<typename Type>
unspecified get_value(const Type & default_value) const;
вы определили Type
как int
, int
, так как параметр шаблона функции предполагает, что значением по умолчанию может быть только int
, а не строка.