C++使用yaml配置文件的過程記錄

一yaml的環境部署

參考文章:https://www.twblogs.net/a/5baaa2a12b7177781a0e5771/zh-cn 環境安裝到使用,可參考強

yaml-cpp的版本和源碼github:https://github.com/jbeder/yaml-cpp/releases

環境部署流程:

1.下載版本,比如:yaml-cpp-yaml-cpp-0.6.2

2.在linux上解析,進入目錄,在代碼目錄下創建build文件夾

3.接下來的四個命令參考wiki裏的,如果成功會在build裏產生一個libyaml-cpp.a的文件

cd build

cmake ..

make

make install

4.可以去看下/usr/local/lib/libyaml-cpp.a是否存在,上面make成功的話,會有的。如果沒有參考wiki裏的find看看在哪

 

二編譯執行

例子參考wiki裏的就行,>>的重載這塊可以刪掉的,也不太建議,還是用as<int>()這樣轉換後賦值的好。

編譯命令:g++ -g -std=c++11 robot.cpp /usr/local/lib/libyaml-cpp.a

執行命令 ./a.out

三關鍵的編程點

#include "yaml-cpp/yaml.h" //安裝yaml-cpp參考google code 主頁
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

typedef struct TagCameraConfigInfoS {
    int cameraId;
    bool isStitch;
    int stFullSizeW;
}CAMERA_CONFIG_INFO_S;
int main()
{
    std::ifstream fin("cameracfg.yaml"); // 讀入yaml配置文件。
    try {
        // load yaml file
        YAML::Node doc = YAML::Load(fin);
        if (!doc["cameras"]) {
            printf("the cameras nodes doesn't exist\n");
            return -1;
        }
        // parse cameras params
        std::string sc = "cameras";
        YAML::Node camerasNode = doc[sc];
        for (unsigned int i = 0; i < camerasNode.size(); i++) {
            const YAML::Node& cNode = camerasNode[i];
            std::cout << cNode << "\n";
            std::cout << "===================" << std::endl; 

            CAMERA_CONFIG_INFO_S camS;
            camS.cameraId = (i+1);
            camS.isStitch = cNode["isStitch"].as<bool>();
            if (cNode["fullSizeWidth"]) {
                camS.stFullSizeW = cNode["fullSizeWidth"].as<int>();
            } else {
                printf("some camera loss fullSizeWidth param");
                return -1;
            }
            
        }
        std::cout << "parse end!" << std::endl;
    } catch (const YAML::Exception& e) {
        printf("when parsing camera config yaml file error!\n");
        std::cerr << e.what() << "\n";
        return -1;
    }
  return 0;
}

四.對應的yaml文件

#Camera Config
cameras:
  - cameraName: FRONT_1
    cameraType: 1
    isStitch: false
    fullSizeWidth: 2048

  - cameraName: FRONT_2
    cameraType: 2
    isStitch: true
    fullSizeWidth: 2048

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章