如何使用yaml-cpp构建节点?

Nec*_*tos 4 c++ yaml yaml-cpp

我想在我的一个项目中使用 yaml-cpp 来生成 yaml 文件,但是我很难弄清楚我到底应该如何处理这个问题。我需要发出的 yaml 文件应如下所示:

action_counts:
  version: 0.3
  subtree:
    - name: system
      local:
      - name: adder
        action_counts:
          - name: add
            counts: 1000
          - name: idle
            counts: 10000
Run Code Online (Sandbox Code Playgroud)

到目前为止我还没能写出最后四行。我知道“-”代表一个数组,但我不知道如何打印名称并计算这样的键数。

我编写了一些代码来试验 yaml-cpp。代码如下:

    YAML::Node node;

    node["action_counts"] = YAML::Null;
    node["action_counts"]["version"] = "0.3";

    node["action_counts"]["subtree"].push_back("system");

    std::ofstream fout("fileUpdate.yaml"); 
    fout << node; 

    return 0;
Run Code Online (Sandbox Code Playgroud)

它产生的输出是这样的:

action_counts:
  version: 0.3
  subtree:
    - system
Run Code Online (Sandbox Code Playgroud)

这里的最后一行是错误的,但我还没有设法找到如何打印- name: system而不是这一行。我该怎么做呢?

完成后我如何打印其余部分?是数组local的一部分吗- name?我想一旦我知道如何将它们格式化为两行,我就可以自己弄清楚其余的内容。

ale*_*ame 5

在库的测试中可以找到很多创建消息的例子yaml-cpp

所需的结构可以如下形成:

#include <fstream>
#include "yaml-cpp/yaml.h"

int main() {
    YAML::Node action_1;
    action_1["name"] = "add";
    action_1["counts"] = 1000;

    YAML::Node action_2;
    action_2["name"] = "idle";
    action_2["counts"] = 10000;

    YAML::Node local_item;
    local_item["name"] = "adder";
    local_item["action_counts"].push_back(action_1);
    local_item["action_counts"].push_back(action_2);

    YAML::Node local;
    local.push_back(local_item);

    YAML::Node subtree_item;
    subtree_item["name"] = "system";
    subtree_item["local"] = local;

    YAML::Node root;
    root["action_counts"]["version"] = "0.3";
    root["action_counts"]["subtree"].push_back(subtree_item);

    std::ofstream fout("fileUpdate.yaml");
    fout << root;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)