Yaml-cpp 在析构函数中发出时会发出双引号 yaml 字符串

问题描述 投票:0回答:1

我正在尝试使用 yaml-cpp 在对象销毁时序列化一些数据。这通常工作正常,但一旦该对象是静态的,就会发生奇怪的事情:每个字符串(也是映射的键)都用双引号引起来。 示例

struct EmitterTest
{
    ~EmitterTest()
    {
        Serialize();
    }

    void Serialize()
    {
        YAML::Emitter out;

        out << YAML::BeginMap << YAML::Key << "Test";
        out << YAML::BeginMap;
        out << YAML::Key << "String1" << YAML::Value << "String1";
        out << YAML::Key << "String2" << YAML::Value << "String2";
        out << YAML::Key << "String3" << YAML::Value << "Foo";
        out << YAML::EndMap;
        out << YAML::EndMap;

        std::cout << out.c_str() << std::endl;
    }
}

static EmitterTest s_Test;

int main()
{
    s_Test.Serialize();
}

预期输出:

Test:
  String1: String1
  String2: String2
  String3: Foo
Test:
  String1: String1
  String2: String2
  String3: Foo

实际产量:

Test:
  String1: String1
  String2: String2
  String3: Foo
"Test":
  "String1": "String1"
  "String2": "String2"
  "String3": "Foo"

请注意,此行为仅在销毁前调用一次 Serialize() 函数时才会发生。

c++ yaml-cpp
1个回答
0
投票

解决这个问题的方法不是在析构函数中发出,你不知道它何时像静态变量一样被破坏。

© www.soinside.com 2019 - 2024. All rights reserved.