簡體   English   中英

在 yaml-cpp 中流式傳輸我自己的類型的正確方法是什么?

[英]What is the correct way to stream my own types in yaml-cpp?

我對將 YAML-CPP 與我自己的類型一起使用感到困惑。 我可以找到的文檔似乎列出了兩種不同的流式傳輸方式。

首先,“How To Emit YAML”頁面只說YAML::Emitter 的重載operator << 顯然這只是為了輸出。 但是我找不到任何關於為YAML::Parser編寫某種等效operator >>重載的內容

同時“教程”頁面

要將 yaml-cpp 與您自己的數據類型一起使用,您需要專門化 YAML::convert<> 模板類。

它列出的這種方法讓我在我的轉換專業中編寫了一個encodedecode函數。

我正在使用當前的 0.6 版本。 其中一種是“舊”方式,一種是“新”方式,還是我需要兩者都做? 如果我需要兩者都做,這兩者如何協同工作? 因為對我來說,當operator <<應該處理其中一個時,轉換專業化的東西需要一個encode / decode函數,這對我來說毫無意義

抱歉回復晚了,我現在才看到這個帖子。

作為部分答案,我為 operator<< 所做的如下:

template <typename T_>
YAML::Emitter& operator<<(YAML::Emitter& out, const T_& rhs) {
  out << convert<T_>::encode(rhs);
  return out;
}

這樣,您的所有自定義類型只有一個 operator<<,它只使用您在自定義 YAML 轉換專業化中創建的實現。

您可以為操作員做類似的事情>>我想,但我從來沒有需要它,因為使用您的自定義 YAML 轉換專業化,您已經可以編寫一些簡單的東西:

my_custom_type_instance = yaml_node.as<MyCustomType>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM