我有一个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}
我怎样才能做到这一点?