這個問題主要針對yaml-cpp(Jesse Beder)的作者,他曾請求過關於yaml-cpp使用的問題。如何使用yaml-cpp發出複雜的數據結構?
在許多地方,包括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的很多不同),o r
「目前最好的方法是使用發射器並從節點的子節點進行選擇和選擇」,即文檔中給出的示例。這種方法的問題在於它只適用於最簡單的情況。假設我想將一個元素添加到地圖序列中,其中地圖的其中一個元素本身就是一個列表?這可以很快得到任意複雜!找到插入新數據的位置,放出操縱器,這一切都必須「手動」完成。
使問題更加複雜,發射器是一個格式化和其唯一的輸出是一個字符串,所以我唯一的選擇是我的修改發射整個YAML文檔,然後再重新解析到一個新的內存表示。如果我正在對文檔進行很多更改,則此操作的效率足跡會快速增加。
我知道修改現有的Node有實際的挑戰(你如何處理對Node數據或子節點數據的現有引用?)。然而,在我看來,允許即時創建新的獨立節點並將其插入到內存樹中應該至少是直截了當的。例如,這是如何實現JsonCpp: http://jsoncpp.sourceforge.net
這將至少啓用您發現的「發射器」方法,如果效率低下,它可能是可行的解決方法。
我希望你對這些問題的看法。不幸的是,這些限制是相當嚴重的,並且考慮到yaml-cpp是唯一的C++/OO YAML庫,我想知道除了切換到JSON之外是否還有其他實用的選擇。
非常感謝您提前對您的想法!
非常感謝您提供快速,周到的答覆,傑西。對此,我真的非常感激。我確實會通過電子郵件向你發送跟進信息。 – DSII