この質問は、主にyaml-cppの使用法に関する質問をここに投稿するように要求したyaml-cppの作成者(Jesse Beder)を対象としています。
yaml-cppドキュメントを含む多くの場所で、 http: //code.google.com/p/yaml-cpp/wiki/HowToEmitYAML#Using_Existing_Nodes
yaml-cppはメモリ内の既存のYAML::Nodeオブジェクトを変更する方法を提供しないとおっしゃいましたが、メモリ内のYAMLを変更するための提案は次のとおりです。
独自のデータ構造を使用してYAMLをメモリに保存し、シリアル化時にyaml-cppにフィードバックします(これは基本的にYAML :: Nodeでのポリモーフィズムの再実装に要約され、yamlの多くの再実装と大差ありません- cpp)、または
「現在、これを行うための最良の方法は、エミッターを使用して、ノードの子から選択することです」、つまり、ドキュメントに示されている例です。このアプローチの問題は、最も単純な場合にのみうまく機能することです。マップの要素の1つ自体がリストである、一連のマップに要素を追加したいとしますか?これは非常に迅速に任意に複雑になる可能性があります!新しいデータを挿入する場所を見つけ、マニピュレータを出力します。これはすべて「手作業」で行う必要があります。
問題を悪化させるために、エミッターはフォーマッターであり、その唯一の出力は文字列であるため、私の唯一のオプションは、変更を加えたYAMLドキュメント全体を出力し、それを新しいメモリ内表現に再解析することです。ドキュメントに多くの変更を加えている場合、この操作の効率のフットプリントはすぐに増加します。
既存のノードの変更には実装上の課題があることを理解しています(ノードのデータまたは子ノードのデータへの既存の参照をどのように処理しますか?)。ただし、新しい独立したノードをオンザフライで作成してメモリ内ツリーに挿入できるようにすることは、少なくとも簡単なことのように思えます。これは、たとえば、JsonCppの実装方法です:http: //jsoncpp.sourceforge.net
これにより、少なくとも、文書化した「エミッター」アプローチが、非効率的である場合でも、実行可能な回避策となる可能性があります。
これらの問題についてご意見をいただければ幸いです。残念ながら、これらの制限は非常に厳しく、yaml-cppが唯一のC ++ / OO YAMLライブラリであることを考えると、JSONに切り替える以外に実用的な代替手段があるのではないかと思います。
よろしくお願いします!