如何设置 yaml-cpp 节点样式?

Posted

技术标签:

【中文标题】如何设置 yaml-cpp 节点样式?【英文标题】:how to set yaml-cpp node style? 【发布时间】:2013-02-02 06:44:00 【问题描述】:

我有一个 vector3 类。

class vector3

    float x, y, z;


node["x"] = vector3.x;
node["y"] = vector3.y;
node["z"] = vector3.z;

结果是

x: 0
y: 0
z: 0

我希望结果是:

x: 0, y: 0, z: 0

如果使用旧的API,我可以使用YAML::Flow来设置样式:

YAML::Emitter emitter;
out << YAML::Flow  << YAML::BeginMap << YAML::Key << "x" << YAML::Value << x << YAML::EndMap

使用新的 API,如何设置样式?

我在一个 yaml-cpp 项目问题页面上问了这个问题:

https://code.google.com/p/yaml-cpp/issues/detail?id=186

我得到了答案:

您仍然可以使用发射器并设置流样式:

YAML::Emitter emitter;
emitter << YAML::Flow << node;

vector3 是对象的一部分。我专攻YAML::convert&lt;&gt;模板类

template<>
struct convert<vector3>

    static Node encode(const vector3 & rhs)
    
        Node node = YAML::Load("");
        node["x"] = rhs.x;
        node["y"] = rhs.y;
        node["z"] = rhs.z;

        return node;
    

所以我需要返回一个节点,但是发射器无法转换为节点。

我需要对象喜欢那个:

GameObject:
  m_Layer: 0
  m_Pos: x: 0.500000, y: 0.500000, z: 0.500000

我该怎么做?

【问题讨论】:

你能复制你的代码来发出整个 YAML 吗?您的整个 YAML 文档是单个节点,还是要零碎输出? 另外,你能澄清一下“但是vector3是对象的一部分”是什么意思吗? 对不起,我的意思是对象有一个成员变量,类型是vector3。 我在***中找到了一个线程,也问了同样的问题。***.com/questions/14282645/…。这个功能什么时候实现? 【参考方案1】:

不久前,在 yaml-cpp 中扩展了节点接口以包含 SetStyle() 函数,在 encode 中的任何位置添加以下行应该会产生所需的结果

node.SetStyle(YAML::EmitterStyle::Flow);

【讨论】:

以上是关于如何设置 yaml-cpp 节点样式?的主要内容,如果未能解决你的问题,请参考以下文章

将多行字符串添加到 Yaml-cpp 节点

你如何确定你在 yaml-cpp 中处理啥样的节点?

如何在 yaml-cpp 中合并节点

如何确定yaml-cpp中节点的内置标签?

如何在 yaml-cpp 中指定 Null 节点的输出格式?

如何使用 yaml-cpp 删除 YAML 文档的节点