我想在 C++ 项目中使用不敏感的 yaml-cpp,因为它完全符合我的需求。但是我想从另一个节点更新一个节点,即正确地将不存在的节点从一种模式添加到另一种模式,或者替换现有节点的现有值。我无法找到如何简单地使用当前界面来做到这一点......
所以我尝试在迭代器上使用一个简单的循环来做到这一点。我发现以下事情在遍历地图节点时不起作用:
if (node_1[it->first]) /*...*/
它没有找到任何节点!因此,对于以标量为键的映射节点,测试if (node_1[it->first.Scalar()]) /*...*/
效果很好。我的问题是对序列键做同样的事情。我怎样才能做到这一点?
编辑
以下是 YAML 文档的示例:
---
#Fake entry
Time: 0.1.1.2
ID: 25814
Emitter: Me
Line : {
orig: 314,
st: 512
}
Message : |
This is a fake error
#More difficult
[0,1,2,3] : my_address
[5, 6, 7, 8] : an_address
...
该文档可以毫无问题地加载到节点中,例如 doc1;我现在想针对另一个 YAML 文档修改一些条目,例如:
---
Comment: what a dummy file!
Emitter: You
[0,1,2,3] : address changed
...
所以我将第二个文档加载到节点 doc2 中,我想用 doc 2 的节点更新 doc1。doc 2 的第一个键不存在于 doc 1 中并且是一个标量,所以我可以做doc1[it->first.Scalar()] = it->second
. 第二个键存在,因此相同的指令将更新 doc1,替换与 key 链接的值Emitter
。我的问题是我无法成功找到 doc1 中的第三个键,因为它是一个序列。