如何用yaml-cpp搭建节点?

How to build a node with 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

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

我写了一些代码来试验 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;

它产生的输出是这样的:

action_counts:
  version: 0.3
  subtree:
    - system

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

完成后如何打印其余部分? local- name 数组的一部分吗?我想一旦我知道如何将它们格式化为两行,我就可以自己解决剩下的问题。

数组中的值只是与键 namelocal 的另一个映射,因此您需要将该映射放入数组中,例如:

YAML::Node systemTree;

systemTree["name"] = "system";
/* assuming you have put together adderTree similarly */
systemTree["local"].push_back(adderTree);

YAML::Node root;

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

root["action_counts"]["subtree"].push_back(systemTree);

可以在 yaml-cpp 库的 tests 中找到许多创建消息的示例。

想要的结构可以组成如下:

#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;
}