C++ 在YAML中迭代

C++ 在YAML中迭代,c++,yaml,yaml-cpp,C++,Yaml,Yaml Cpp,我有以下YAML: Configuracion: vel_personaje: 3 merge_scroll: 30 Tipos: nombre: arbol imagen: img/tree ancho_base: 2 alto_base: 2 pixel_ref_x: 30 pixel_ref_y: 40 fps: 10 delay: 5 nombre: casa imagen: img/house

我有以下YAML:

Configuracion:
  vel_personaje: 3
  merge_scroll: 30


Tipos:
    nombre: arbol
    imagen: img/tree
    ancho_base: 2
    alto_base: 2
    pixel_ref_x: 30
    pixel_ref_y: 40
    fps: 10
    delay: 5

    nombre: casa
    imagen: img/house

    nombre: auto
    imagen: img/tree
    ancho_base: 2
    alto_base: 2
问题是,我可以有任意多个“Tipos”,但有时它们有8个参数,有时只有2个,或者介于这两个参数之间的任何数字。我试图找出如何使用yaml cpp读取这些值,但我无法做到这一点。我尝试了以下方法,但没有成功

while (contador < tipos_size){

    try {
        name = tipos["nombre"].as<string>();
        contador++;
    } catch (YAML::Exception& yamlException) {
        name = "pepe";
    }

    try {
        imagen = tipos["imagen"].as<string>();
        contador++;
    } catch (YAML::Exception& yamlException) {
        imagen = "img/def";
    }

    try {
        ancho_base = tipos["ancho_base"].as<int>();
        contador++;
    } catch (YAML::Exception& yamlException) {
        ancho_base = 1;
    }

    try {
        alto_base = tipos["alto_base"].as<int>();
        contador++;
    } catch (YAML::Exception& yamlException) {
        alto_base = 1;
    }

    try {
        pixel_ref_x = tipos["pixel_ref_x"].as<int>();
        contador++;
    } catch (YAML::Exception& yamlException) {
        pixel_ref_x = 10;
    }

    try {
        pixel_ref_y = tipos["pixel_ref_y"].as<int>();
        contador++;
    } catch (YAML::Exception& yamlException) {
        pixel_ref_y = 10;
    }

    try {
        fps = tipos["fps"].as<int>();
        contador++;
    } catch (YAML::Exception& yamlException) {
        fps = 24;
    }

    try {
        delay = tipos["delay"].as<int>();
        contador++;
    } catch (YAML::Exception& yamlException) {
        delay = 100;
    }
while(contador
谢谢你的帮助,谢谢

编辑代码:

    for (YAML::Node tipo : tipos) {

    try {
        name = tipo["nombre"].as<string>();
    } catch (YAML::Exception& yamlException) {
        name = "pepe";
    }
(YAML::节点tipo:tipos)的
{
试一试{
name=tipo[“nombre”].as();
}catch(YAML::异常和yamlException){
name=“pepe”;
}

看起来您希望
Tipos
是一系列地图,而不是地图:

Configuracion:
  vel_personaje: 3
  merge_scroll: 30


Tipos:

  - nombre: arbol
    imagen: img/tree
    ancho_base: 2
    alto_base: 2
    pixel_ref_x: 30
    pixel_ref_y: 40
    fps: 10
    delay: 5

  - nombre: casa
    imagen: img/house

  - nombre: auto
    imagen: img/tree
    ancho_base: 2
    alto_base: 2
对于,您可以进行如下迭代:

for (YAML::Node tipo : tipos) {
  // handle tipo
}

谢谢你的回答!这就是我一直在寻找的。但是我知道我有一个不同的问题,我相信你可以帮助我。这样做:对于(YAML::Node tipo:tipos){try{name=tipo[“nombre”].as();}catch(YAML::Exception&yamlException){name=“pepe”}它总是通过“catch”进入部分..并且没有从文件中读取值。你知道可以是什么吗?我给你留下了代码,在主要问题上进行了良好的缩进编辑。