如何通过 yaml-cpp 列出通用 yaml 的所有键

How to list all keys of a generic yaml by yaml-cpp

如果 yaml 文档包含序列、映射和标量的混合,并且这些集合类型本身是多层次的,是否有内置函数或简单的方法来列出所有键,而不是叶子的最终价值?假设键是字符串。

您必须在文档中的节点上递归,检查每个节点的类型:

switch (node.Type()) {
  case Null: // ...
  case Scalar: // ...
  case Sequence:
    for (auto it = node.begin(); it != node.end(); ++it) {
      auto element = *it;
      // recurse on "element"
    }
    break;
  case Map:
    for (auto it = node.begin(); it != node.end(); ++it) {
      auto key = it->first;
      auto value = it->second;
      // recurse on "key" and "value"
      // if you're sure that "key" is a string, just grab it here
    }
    break;
  case Undefined: // ...
}