我正在尝试使用 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() 函数时才会发生。
解决这个问题的方法不是在析构函数中发出,你不知道它何时像静态变量一样被破坏。