yaml-cpp 总是创建一个大小为 0 的标量节点
Posted
技术标签:
【中文标题】yaml-cpp 总是创建一个大小为 0 的标量节点【英文标题】:yaml-cpp always creates a scalar node with size 0 【发布时间】:2020-08-11 13:40:55 【问题描述】:我想使用 yaml-cpp 来存储一些配置值。为了与 yaml-cpp 取得联系,我编写了一个创建节点的方法(_config 来自 Type YAML::Node),将一些值放入其中并将其写入文件:
void write_config()
std::ofstream fout("/home/user/config.yaml");
_config["Foo"]["0"] = "0";
_config["Foo"]["1"] = "1";
_config["Foo"]["2"] = "2";
_config["Foo"]["3"] = "3";
_config["Foo"]["4"] = "4";
_config["Foo"]["5"] = "5";
fout << _config;
运行此方法后,会创建一个有效的 yaml 文件:
Foo:
1: 1
3: 3
0: 0
5: 5
4: 4
2: 2
之后,我创建了一个读取文件并打印一些信息的方法:
void load_config()
_config = YAML::Node("/home/user/config.yaml");
cout << "_config: " << _config << endl;
cout << "doc.Type(): " << _config.Type() << "\n";
cout << "doc.size(): " << _config.size() << "\n";
for (const auto& kv : _config)
std::cout << kv.first.as<std::string>() << "\n"; // prints Foo
std::cout << kv.second.as<std::string>() << "\n"; // prints Foo
但输出是:
_config: /home/user/config.yaml
doc.Type(): 2
doc.size(): 0
有人能告诉我为什么节点是空的(大小 == 0)以及如何正确读取文件吗?
提前谢谢你!
【问题讨论】:
【参考方案1】:我发现了我的错误......
_config = YAML::Node("/home/user/config.yaml");
应该是
_config = YAML::LoadFile("/home/user/config.yaml");
【讨论】:
以上是关于yaml-cpp 总是创建一个大小为 0 的标量节点的主要内容,如果未能解决你的问题,请参考以下文章
如何在不知道终端标量的映射和类型中的键的情况下使用 yaml-cpp 库解析任意 yaml 文件?
使用 yaml-cpp 解析 YAML !!timestamp(日期时间)