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

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值