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 に答える