在日常的代码中,有一些值是配置文件中定义的,这些值可以根据用户的要求进行调整和改变。这往往会写在yaml格式的文件中。这样开放程序给用户时,就可以不必开放对应的源码,只开放yaml格式的配置文件即可。
将配置文件中的值读入程序也非常的简单。
我们先写一个简单的配置文件,然后将其中的值读入到程序中。配置文件如下:
general_test:
test_name: yaml_test
is_debug: true
file_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的库文章来源:https://www.toymoban.com/news/detail-670137.html
g++ yaml_test.cpp -lyaml-cpp
运行结果如下:文章来源地址https://www.toymoban.com/news/detail-670137.html
test name is: yaml_test
is_debug is: 1
test time is: 2
到了这里,关于Yaml配置文件读取方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!