在yaml-cpp中流式传输我自己的类型的正确方法是什么?



我对使用YAML-CPP与我自己的类型感到困惑。我能找到的文档似乎列出了两种不同的流式传输方式。

首先是"如何发出YAML"页面说只是重载operator <<为YAML::发射器。显然这只是为了输出。但是我找不到任何关于为YAML::Parser

编写某种等效的operator >>

重载的提及。同时"Tutorial"页面说

要对自己的数据类型使用yaml-cpp,需要专门化YAML:: convert<比;模板类。>

它列出的这种方法让我在转换专门化中同时编写encodedecode函数。

我使用的是当前的0.6版本。其中一个是"老的"吗?一种"新"的方式;还是我需要两者都做?如果两者都需要,这两者是如何协同工作的?因为对我来说,当operator <<应该照顾它们中的一个时,转换专门化的事情将需要encode/decode函数,这是没有意义的

很抱歉回复晚了,我现在才看到这篇文章。

作为部分答案,我对操作符<<

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

这样你就只有一个操作符<<对于所有自定义类型,它只是使用您已经在自定义YAML转换专门化中创建的实现。

也可以对操作符>>我想,但我从来没有需要过它,考虑到使用自定义YAML转换专门化,您已经可以编写像以下这样简单的内容:

my_custom_type_instance = yaml_node.as<MyCustomType>();

相关内容

最新更新