我將yaml-cpp與 C 11 一起使用。我可以使用如下簡單的方法創建一個 YAML 檔案:
#include <yaml-cpp/yaml.h>
#include <iostream>
int main(void)
{
YAML::Node topNode;
topNode["one"]["two"]["A"] = "foo";
topNode["one"]["two"]["B"] = 42;
std::cout << "%YAML 1.2\n---\n" << topNode;
return 0;
}
這將產生一個像這樣的 YAML 檔案:
%YAML 1.2
---
one:
two:
A: foo
B: 42
迷人的!
我也可以像這樣生成完全相同的YAML 檔案:
#include <yaml-cpp/yaml.h>
#include <iostream>
int main(void)
{
YAML::Emitter out;
out << YAML::BeginMap // document {
<< "one"
<< YAML::BeginMap // one {
<< "two"
<< YAML::BeginMap // two {
<< YAML::Key << "A" << YAML::Value << "foo"
<< YAML::Key << "B" << YAML::Value << 42
<< YAML::EndMap // two }
<< YAML::EndMap // one }
<< YAML::EndMap // document }
;
std::cout << "%YAML 1.2\n---\n"
<< out.c_str();
return 0;
}
第二種方法的好處是我還可以在輸出檔案中添加注釋:
#include <yaml-cpp/yaml.h>
#include <iostream>
int main(void)
{
YAML::Emitter out;
out << YAML::BeginMap // document {
<< "one"
<< YAML::BeginMap // one {
<< "two"
<< YAML::BeginMap // two {
<< YAML::Key << "A" << YAML::Value << "foo"
<< YAML::Comment("A should be 'foo'")
<< YAML::Key << "B" << YAML::Value << 42
<< YAML::Comment("B is meaningful")
<< YAML::EndMap // two }
<< YAML::EndMap // one }
<< YAML::EndMap // document }
;
std::cout << "%YAML 1.2\n---\n"
<< out.c_str();
return 0;
}
生產:
%YAML 1.2
---
one:
two:
A: foo # A should be 'foo'
B: 42 # B is meaningful
我的問題是否有辦法在第一種方法中添加評論?也許是這樣的:
topNode["one"]["two"]["A"] = "foo";
topNode["one"]["two"]["A"].addComment("A should be 'foo'");
我可以子類化YAML::Node,添加我的addComment()方法,但我不想重寫所有內容YAML::Emitter以適當地附加我的評論。代碼在那里,但我不知道如何獲得它。如何?你能給我舉個例子或方法嗎?
我了解 YAML 規范說注釋不是 YAML 檔案的組成部分,可以丟棄。我的用戶發現它們很有用,所以我不喜歡以“你的問題很愚蠢”開頭的辯論。:-)
uj5u.com熱心網友回復:
這在當前的 API 中是不可能的。Emitter 使用EventHandler,如您所見,它不能發出評論。
創建事件的Emit 函式也不會通過其他方式創建任何評論事件。
由于operator<<onNode將在內部使用 Emitter 類,因此無法通過將評論添加到節點來發出評論,除非您自己重寫發射器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/521003.html
上一篇:鏈接FastPForlib時未定義對“FastPForLib:..”的參考
下一篇:如何洗掉結構C 中結構中的陣列
