无法使用 yaml-cpp 发出空值

Can't Emit an Empty Value with yaml-cpp

我想发出一个空值,但是当我分配一个要发出的空字符串时,输出在技术上不是空的。

代码片段:

YAML::Emitter out;
std::string name;
out << YAML::Key << "name";
out << YAML::Value << name;

预期的 yaml 输出:

name:

实际 yaml 输出:

name: ""

如您所见,我定义了一个空字符串,我希望 yaml 输出实际上为空。 这是有意的行为吗?如果是这样,有没有办法解决这个问题?我的目标是让我的整个 yaml 输出都是免费的。

YAML

name:

name 没有字符串值;它实际上是一个空值。参见,例如,在线解析器 here;规范的 YAML 表示是:

!!map {
  ? !!str "name"
  : !!null "null",
}

yaml-cpp 试图确保您告诉它的内容 ("write this empty string") 是结果 YAML 的解析方式,因此它将空字符串写为 "".

如果要写空值,那么要么不写值,要么写YAML::Null。后者(我相信)会产生

name: ~

这是 null 的规范形式。