当前位置: 首页 > news >正文

Yaml配置文件读取方法

在日常的代码中,有一些值是配置文件中定义的,这些值可以根据用户的要求进行调整和改变。这往往会写在yaml格式的文件中。这样开放程序给用户时,就可以不必开放对应的源码,只开放yaml格式的配置文件即可。

将配置文件中的值读入程序也非常的简单。

我们先写一个简单的配置文件,然后将其中的值读入到程序中。配置文件如下:

general_test:test_name: yaml_testis_debug: truefile_path: ./int_value:test_time: 2

需要注意的是,这里面变量的值在读入程序之初是没有类型的。但是读入之后,其实是有对应需要的类型的,比如is_debug读入后需要时bool类型,test_time读入之后需要是int类型。

下面写个C++程序,做读入上面配置文件的简单验证。

首先需要引用头文件

#include <yaml-cpp/yaml.h>

有几个需要注意的地方:

1. yaml文件是分级写入的,在C++程序中也需要分级读取,或者看成总节点和子节点的关系。如程序中config表示总文件节点,要读取第二级的test_name就需要进行两层的穿透。另外,上面提到的类型问题,在这里用.as来体现,将对应的配置文件中的值,读入成程序中期望得到的值的类型,这里test_name希望读入为string。

config["general_test"]["test_name"].as<std::string>()

2. 层级过多的时候,防止一行输入过多。可以定义子节点名称,然后从子节点开始寻值。

 YAML::Node subnode = config["general_test"];const bool is_debug = subnode["is_debug"].as<bool>();const int test_time = subnode["int_value"]["test_time"].as<int>();

完整的代码如下:

#include <iostream>
#include <yaml-cpp/yaml.h>int main()
{std::string file = "yaml_test.yaml";// 使用loadfile加载要读取的配置文件路径YAML::Node config = YAML::LoadFile(file);// 通过如下格式,获取配置文件中对应项的值const std::string name = config["general_test"]["test_name"].as<std::string>();// 配置文件分级较多时,可以设置子节点 YAML::Node subnode = config["general_test"];const bool is_debug = subnode["is_debug"].as<bool>();const int test_time = subnode["int_value"]["test_time"].as<int>();std::cout << "test name is: " << name << std::endl;std::cout << "is_debug is: " << is_debug << std::endl;std::cout << "test time is: " << test_time << std::endl;return 0;
}

最后,在编译的时候注意需要带上yaml的库

g++ yaml_test.cpp -lyaml-cpp

运行结果如下:

test name is: yaml_test
is_debug is: 1
test time is: 2

http://www.lryc.cn/news/138877.html

相关文章:

  • Python3 lambda 函数入门示例 Python lambda 函数
  • 【计算机网络】HTTPs 传输流程
  • 【Linux】国产深度系统装机必备(开发、日常使用)
  • 动态规划入门:斐波那契数列模型以及多状态(C++)
  • LeetCode438.找到字符串中所有字母异位词
  • 【微服务】03-HttpClientFactory与gRpc
  • iOS开发之查看静态库(.a/.framework)中包含的.o文件和函数符号(ar,nm命令)
  • Idea常用快捷键--让你代码效率提升一倍(一)
  • 【Open3D】第二篇:GUI编程
  • 【Python】P0 本系列博文简介与大纲
  • FL Studio 21.1.0 Build 3713中文破解免费下载安装激活
  • 从0开始配置eslint
  • Activity 的启动流程(Android 13)
  • deepspeed学习资料
  • 数据分享|R语言PCA主成分、lasso、岭回归降维分析近年来各国土地面积变化影响...
  • Docker-Consul
  • Pygame编程(2)display模块
  • 第十五天|104.二叉树的最大深度、111.二叉树的最小深度、 222.完全二叉树的节点个数
  • 图像识别技术在医疗领域的革命:探索医学影像诊断的未来
  • 计网第四章(网络层)(二)
  • 原生微信小程序使用 wxs;微信小程序使用 vant-weapp组件
  • qml相关知识1
  • linux+c+qt杂记
  • shouldComponentUpdate有什么作用?
  • 华为OD-滑动窗口最大值
  • Linux:ansible自动化运维工具
  • 前端如何使用WebSocket发送消息
  • 纸贵科技连续三年蝉联IDC中国 FinTech 50榜单
  • 台积电美国厂施工现场混乱,真令人头痛 | 百能云芯
  • React绑定antd输入框,点击清空或者确定按钮实现清空输入框内容