2016-03-03 2 views
1

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

ответ

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: // ... 
} 
+0

Спасибо Джесси! Вы хотите сказать, что скалярный случай попадает в последовательность? – Hackless

+1

Нет, это просто для краткости. –

Смежные вопросы