如何使用 yaml-cpp 解析文件

How to parse a file with yaml-cpp

我有一个如下所示的 yaml 文件:

construction_cone_1:
  model: construction_cone
  model_type: sdf
  position: [ 1.2, 3.4, 0.0 ]
  orientation: [ 0.0, 0.0, 0 ]
  
construction_cone_2:
  model: construction_cone
  model_type: sdf
  position: [ 3.0, 7.0, 0.0 ]
  orientation: [ 0.0, 0.0, 0 ]
 
...

我正在按照 this 教程在我的 C++ 应用程序中解析它。

到目前为止我的理解是,按照结构,文件作为地图加载到 YAML::Node 中。所以,我想,阅读它的一个好方法是:

YAML::Node map = YAML::LoadFile(file_path);
  for(YAML::const_iterator it=map.begin(); it!=map.end(); ++it){
    const std::string &key=it->first.as<std::string>();

第一个条目为“construction_cone_1”,依此类推。按照这个逻辑,我无法弄清楚如何阅读其余部分。特别是,对于地图的每个条目,我有兴趣读取对象位置。

我想我低估了图书馆的力量。原来这样做解决了问题:

  YAML::Node map = YAML::LoadFile(filename);
  for(YAML::const_iterator it=map.begin(); it!=map.end(); ++it){
    const std::string &key=it->first.as<std::string>();

    Eigen::Vector2f pos;
    YAML::Node attributes = it->second;
    YAML::Node position = attributes["position"];
    for(int i=0; i<2; ++i){
      pos(i) = position[i].as<float>();
    }

    ...
  }