私のニーズに完全に適合するため、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
...
したがって、この 2 番目のドキュメントをノード doc2 にロードし、ドキュメント 2 のノードで doc1 を更新したいと考えています。ドキュメント 2 の最初のキーはドキュメント 1 には存在せず、スカラーであるため、実行できますdoc1[it->first.Scalar()] = it->second
。2 番目のキーが存在するため、同じ命令で doc1 が更新され、 key にリンクされた値が置き換えられますEmitter
。私の問題は、シーケンスであるため、doc1 内の 3 番目のキーを見つけることができないことです。