【发布时间】:2015-01-27 13:20:29
【问题描述】:
我正在尝试编写一个函数,该函数将使用yaml-cpp 在我的.yaml 文件中写入/编辑一个节点。我有点让它工作,因为我的代码将编辑本地副本。当我打印出_baseNode 时,它显示该节点的值是 5.4。但是,退出函数并在我的计算机上检查我的.yaml 后,值 5.4 不存在。
这是我的尝试(_baseNode 是我班级的私人成员):
void ParametersServerPC::testFunc2() {
boost::filesystem::path path(boost::filesystem::initial_path() / _parameterFileName);
_baseNode = YAML::LoadFile(_parameterFileName);
_baseNode["chip"]["clock_rate"]["3"] = 5.4;
std::cout << _baseNode << std::endl;
}
对于我的第二次尝试,我创建了一个YAML::Node& baseNode:
YAML::Node& baseNode = YAML::LoadFile(_parameterFileName);
然后我得到这个错误:
invalid initialization of non-const reference of type 'YAML::Node&' from an rvalue of type 'YAML::Node'
对于那些感兴趣的人,.yaml 文件看起来像这样:
chip:
clock_rate:
0: 1.0
1: 1.0
2: 1.0
3: 3.0
4: 1.0
我想将 3 映射的值从 3.0 更改为 5.4。
【问题讨论】:
-
您希望
LoadFile做什么?很明显,它将数据加载到内存中,并且没有为文件系统提供神奇的接口。您必须使用EmitterAPI 将更改后的树显式写回文件系统,检查stackoverflow.com/questions/3342355/…。 -
哦,好吧,这是有道理的。我认为根据教程 (code.google.com/p/yaml-cpp/wiki/Tutorial#Building_Nodes) 我可以在文件上构建节点。然后我会研究这个
EmitterAPI,干杯:)