yaml-cpp解析以序列为键的映射

时间:2015-05-15 02:49:58

标签: yaml yaml-cpp

我开始使用yaml-cpp,我在解码文件的一部分时遇到了麻烦。我要解码的文件如下所示:

leds:
    - [251, 252,253]    
    - [254, 250,220] 
    - [230, 231,230] 

这是我试图实施的方式,但到目前为止还没有成功。

        namespace YAML {

        template<>
        struct convert<Led_Yaml>
        {
          static Node encode(const Led_Yaml& led_data)
          {
            Node node;
            node.push_back(led_data.r);
            node.push_back(led_data.g);
            node.push_back(led_data.b);
            return node;
          }
          static bool decode(const Node& node, Led_Yaml& led_data)
          {
            led_data.r = node[0].as<int>();
            led_data.g = node[1].as<int>();
            led_data.b = node[2].as<int>();
            return true;
          }
        };
    }


  void YAML_LedParser(std::string filename)
    {
      try
      {
          YAML::Node led_set = YAML::LoadFile(filename);

          for(std::size_t i = 0; i< led_set.size();++i)
          {
            if(led_set["leds"])
            {
                std::cout<<"iteration\n";
                led_collec =  it->second.as<Led_Collection_Yaml>();
            }

            if(led_set.IsSequence())
            {
              //dummy = led_set[i].as<<Led_Yaml>();
              led_collection.push_back(led_set[i].as<Led_Yaml>());
              //std::cout<<"Got a Sequence!"<<"\n";
              std::cout<<"r: "<<led_collection[i].r<<"\n";
            }
          }

          //led_collec = led_set["leds"].as<Led_Collection>();
      }
      catch(YAML::ParserException& e)
      {
        std::cout << "Failed to load file: "<<e.what()<<"\n";
        return;
      }
    }

我面临的问题是我不知道如何解析序列列表

1 个答案:

答案 0 :(得分:0)

最简单的事情是,如果您知道这是YAML的结构,那么:

std::vector<Led_Yaml> leds = led_set["leds"].as<std::vector<Led_Yaml>>();

如果您确实想手动迭代序列:

for (auto element : led_set["leds"]) {
  Led_Yaml led = element.as<Led_Yaml>();
  // do something with led
}