C++YAML読み書きの概要

2298 ワード

1.yaml-cppインストール
  • yaml-cppオープンソースライブラリ、githubアドレス、CMakeによるコンパイル構築手順:
  • mkdir build //   build   
    cd build
    cmake -DBUILD_SHARED_LIBS=ON ..
     //        CMakeLists.txt,      build    
    make
    sudo make install
    

    ubuntu16.04インストールyaml:sudo apt-get install libyaml-cpp-dev私のは他のパッケージをインストールするときに依存しているはずなのでインストールしました.ディレクトリは/usr/include/yaml-cppで、*.h形式が存在する.
    2. read yaml
    #ifdef HAVE_NEW_YAMLCPP
    // The >> operator disappeared in yaml-cpp 0.5, so this function is
    // added to provide support for code written under the yaml-cpp 0.3 API.
    template
    void operator >> (const YAML::Node& node, T& i)
    {
        i = node.as();
    }
    #endif
    
    
    void loadYamlFile(std::string name){
      YAML::Node node = YAML::LoadFile(name);
      std::string test_param2;
      node["marker_name"] >> test_param2;
      std::cout << test_param2 << std::endl;
    }
    
    // CMakeLists.txt
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -Wall")
    add_definitions(-std=c++11)
    INCLUDE(FindPkgConfig)
    pkg_check_modules(NEW_YAMLCPP yaml-cpp>=0.5)
    if(NEW_YAMLCPP_FOUND)
    add_definitions(-DHAVE_NEW_YAMLCPP)
    endif(NEW_YAMLCPP_FOUND)
    

    test.yaml:marker_name: t_1ダイレクトコールloadYamlFile(marker_file);、プリントtest_param 2結果t_1.
    3. write yaml
    std::ofstream out(marker_file, std::ios::app);
    std::string marker_name = "t_" + std::to_string(cnt);
    std::cout << "marker_name :" << marker_name << std::endl;
    
    Emitter node;
    node << BeginMap;
    node << Key << "marker_name" << Value << marker_name;
    node << Key << "pose" << Value << msg->pose;
    node << Key << "---";
    node << EndMap;
    
    out << node.c_str();
    out << '
    '; out.close(); cnt++; std::cout << "------------------" << std::endl;

    yaml結果:
    marker_name: t_1
    pose:
      position: [-0.107327938079834, 0.3301165103912354, 0]
      orientation: [0, 0, 0.642, 0.766]
    ---
    marker_name: t_2
    pose:
      position: [-1.01, -0.475, 0]
      orientation: [0, 0, 0.868, -0.497]
    ---