c++读取文件之---yaml-cpp使用

news/2024/11/17 5:37:13/

实际项目总会遇到有很多超参数的情况,用常规的结构体等无法有效的涵盖所有,为了方便用户进行配置使用,因此使用yaml的方式进行编辑配置,因此去调研使用了yaml-cpp的使用方法。

1、yaml-cpp下载和编译

下载方式很简单,github找到yaml-cpp的repo(yaml-cpp)如下所示:
在这里插入图片描述
从上面下载zip包到电脑的文件夹下,并进行解压:
在这里插入图片描述
打开已安装的cmake界面,配置源码位置编译结果路径,记得要把YAML_BUILD_SHARED_LIBS勾选上,否则后面在自己项目中使用yaml-cpp的时候会出现库缺失的情况。然后直接点击Configure和Generate,不出意外是可以直接生成成功的。
在这里插入图片描述
接着点击cmake-gui上面的open Project直接使用visual studio 2019打开yaml-cpp的源码项目。如果你希望你的lib和dll在Debug/x64下使用,那就配置整个工程的环境为Debug\x64,然后对整个项目重新生成,即可在你的yaml-cpp-master/build/下面生成相对应的lib和dll文件,如下所示:
在这里插入图片描述
以上就是整个yaml-cpp的编译的编译过程。

2、实际项目使用

新建工程cpp-demo,并添加相应的库目录、包含目录、以及链接库名称,具体操作如下所示:

  • 添加相应附加包含目录:
    在这里插入图片描述
  • 添加相应的附加库目录
    在这里插入图片描述
  • 添加链接器
    在这里插入图片描述
    以读取如下文件为例:
flag: 1        
mode: p        
L_top_x: 776 
L_top_y: 529 
R_top_x: 800 
R_top_y: 532 
R_bottom_x: 1786 
R_bottom_y: 952 
L_bottom_x: 752 
L_bottom_y: 1008 
data_path: ./config/detect/1.jpg
save_filepath: ./config/mmdet

需要引入的主要库为:
#include"yaml-cpp/yaml.h"
主要的实现代码如下所示:

#include<iostream>
#include"yaml-cpp/yaml.h"
#include<opencv2/opencv.hpp>using namespace std;
using namespace cv;int main() {std::string yaml_path = "D:/personal/personal/c++/yolo_detect/Config_yolo.yaml";YAML::Node config = YAML::LoadFile(yaml_path);int flag = config["flag"].as<int>();cout << "flag = " << flag << endl;std::string mode = config["mode"].as<string>();cout << "mode = " << mode << endl;std::vector<Point2d> rect;rect.emplace_back(Point2d(config["L_top_x"].as<double>(), config["L_top_y"].as<double>()));rect.emplace_back(Point2d(config["R_top_x"].as<double>(), config["R_top_y"].as<double>()));rect.emplace_back(Point2d(config["R_bottom_x"].as<double>(), config["R_bottom_y"].as<double>()));rect.emplace_back(Point2d(config["L_bottom_x"].as<double>(), config["L_bottom_y"].as<double>()));for (int i = 0; i < rect.size(); i++){cout <<"第"<<i+1<<"点: "<< rect[i].x << " " << rect[i].y << endl;}string video_path = config["data_path"].as<string>();cout << "video_path = " << video_path << endl;string save_path = config["save_filepath"].as<string>();cout << "save_path = " << save_path << endl;return 0;
}

运行结果如下所示:
在这里插入图片描述

3、踩过的坑

  • 使用cmake-gui进行编译的时候,需要勾选YAML_BUILD_SHARED_LIBS,否则在运行demo项目会出现找不到dll的情况
  • 如果出现找不到dll,还有一种可能是dll文件没有加入环境变量或者没有加入到exe运行环境。

参考:
https://blog.csdn.net/briblue/article/details/89515470

END


http://www.ppmy.cn/news/578548.html

相关文章

打不开Eclipse,Eclipse闪退(已解决)

不知道什么原因我的Eclipse打不开了&#xff0c;打开一半就闪退了&#xff0c;并生成了日志文件&#xff0c;在网上百度了一顿&#xff0c;没有解决办法&#xff0c;后来废了九牛二虎之力终于解决了: # # A fatal error has been detected by the Java Runtime Environment: # …

不能正常打开Eclipse闪退的问题

今天突然不能正常打开Eclipse了&#xff0c;什么提示也没有&#xff0c;只看到eclipse的启动画面闪了一下就直接消失了。再看任务管理器&#xff0c;也没有发现有eclipse在任何信息&#xff0c;那么说明eclipse确实没有启动成功。 这时打开命令提示符&#xff0c;运行java,发现…

solar2 android,Solar2(太阳系行星2)

iefans下载为用户提供的太阳系行星2ios版是一款非常简单有趣好玩的益智休闲模拟游戏&#xff0c;在太阳系行星2ios版手游中&#xff0c;你能够自由建立属于自己的行星系统&#xff0c;可以通过收集物资&#xff0c;不断的把自己的行星发展壮大&#xff0c;与其他文明的行星进行…

seata闪退问题(总结)!!!!

seata闪退 我当时要到这个问题可把我难住了 前提 要先配置好seata 然后跟nacos先启动 这个后启动 接下来看办法&#xff1a; 闪退不知道什么问题 就在当前文件的bin目录下执行cmd 运行seate-server.bat文件就能知道什么错误 哇 好多错误 这些错误一个一个来解决 先解决 丢失…

杀戮尖塔java打不开,关于杀戮尖塔闪退和BUG的可能性及官方解决办法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一些可能出现的问题 如果您在更改分辨率或屏幕模式后遇到任何问题&#xff0c;请记住&#xff0c;可以通过在主菜单中按ESC打开设置。如果有严重的问题&#xff0c;请向官方报告以下信息&#xff1a;操作系统&#xff0c;显示屏分…

解决Eclipse打开后闪退 Eclipse在异常关闭后,启动闪退的解决办法

问题描述&#xff1a;Win7下 Eclipse编译原本没问题的工程时&#xff0c;第二天开始编译总是通不过&#xff0c;后来Debug As - Android Application 调试时出现卡死现象。任务管理器强制关闭Eclipse&#xff0c;后重启Eclipse。后又尝试重启计算机&#xff0c;开机后Eclipse一…

eclipse 启动后,闪退

网上的大部分是说删除 .metadata 说会workspace里面项目会消失 下面这个可以启动&#xff0c;项目还在 最好解决办法&#xff1a; 删除文件 [workspace]/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi

解决国内手机安装Google Play打开闪退问题

手机下载酷安app&#xff0c;在酷安app中搜索go谷歌安装器&#xff0c;点击下载安装。安装完成打开会自动检测&#xff0c;点击go按钮自行安装即可。