3

我有一个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<>模板类

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}

我怎样才能做到这一点?

4

1 回答 1

1

不久前,节点接口在 yaml-cpp 中进行了扩展,以包含一个SetStyle()在任何地方添加以下行的函数encode应该具有所需的结果

node.SetStyle(YAML::EmitterStyle::Flow);
于 2016-11-14T20:44:32.533 回答