Как перечислить все ключи универсального yaml с помощью yaml-cpp

Если документ yaml содержит смесь последовательностей, карт и скаляров, и эти типы коллекций сами по себе являются многоуровневыми, есть ли встроенная функция или простой способ перечислить все ключи, но не окончательное значение на листе ? Предполагая, что ключи являются строками.


person Hackless    schedule 03.03.2016    source источник


Ответы (1)


Вам придется рекурсивно работать с узлами в документе, проверяя тип каждого из них:

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: // ...
}
person Jesse Beder    schedule 03.03.2016
comment
Спасибо Джесси! Вы хотите, чтобы скалярный регистр попал в последовательность? - person Hackless; 03.03.2016
comment
Нет, это просто для краткости. - person Jesse Beder; 03.03.2016