如何使用 yaml-cpp 创建顶层对象?

Posted

技术标签:

【中文标题】如何使用 yaml-cpp 创建顶层对象?【英文标题】:How to create the top object with yaml-cpp? 【发布时间】:2021-01-31 07:38:42 【问题描述】:

我正在尝试使用yaml-cpp 为我的应用程序创建一个配置文件,我可以通过

创建map
    YAML::Emitter emitter;
    emitter << YAML::BeginMap;
    emitter << YAML::Key << "Autoplay" << YAML::Value << "false";
    emitter << YAML::EndMap;

    std::ofstream ofout(file);
    ofout << emitter.c_str();

输出类似的东西,

var1: value1
var2: value2

但是我怎样才能使顶部的对象像,

Foo:
  var1: value1
  var2: value2

Bar:
  var3: value3
  var4: value4

等等..我如何获得上面代码中的FooBar

【问题讨论】:

【参考方案1】:

你想要实现的是一个包含 FooBar 两个键的映射。其中每一个都包含一个映射作为值。下面的代码向您展示了如何实现这一目标:

// gcc -o example example.cpp -lyaml-cpp
#include <yaml-cpp/yaml.h>
#include <fstream>

int main() 
  std::string file"example.yaml";

  YAML::Emitter emitter;
  emitter << YAML::BeginMap;

  emitter << YAML::Key << "Foo" << YAML::Value;
  emitter << YAML::BeginMap; // this map is the value associated with the key "Foo"
  emitter << YAML::Key << "var1" << YAML::Value << "value1";
  emitter << YAML::Key << "var2" << YAML::Value << "value2";
  emitter << YAML::EndMap;

  emitter << YAML::Key << "Bar" << YAML::Value;
  emitter << YAML::BeginMap; // This map is the value associated with the key "Bar"
  emitter << YAML::Key << "var3" << YAML::Value << "value3";
  emitter << YAML::Key << "var4" << YAML::Value << "value4";
  emitter << YAML::EndMap;

  emitter << YAML::EndMap; // This ends the map containing the keys "Foo" and "Bar"

  std::ofstream ofout(file);
  ofout << emitter.c_str();
  return 0;

您必须以递归的心态看待这些结构。此代码将创建您提供的示例。

【讨论】:

很好,我不知道这么简单 :D。谢谢。

以上是关于如何使用 yaml-cpp 创建顶层对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 yaml-cpp 发出复杂的数据结构?

yaml-cpp:创建一个未定义的节点

如何安装和使用 YAML-Cpp

如何使用 yaml-cpp 删除 YAML 文档的节点

如何使用 yaml-cpp 发出和解析原始二进制数据

如何使用 yaml-cpp 发出带引号的字符串?