官方使用文档:https://yaml-cpp.docsforge.com/
写入:
#include <yaml-cpp/yaml.h>
void main(int argc, char **argv) {
YAML::Node camera_config_nodes;
camera_config_nodes["width"] = 1920;
camera_config_nodes["height"] = 1080;
camera_config_nodes["cam0"]["intrinsics"][0] = 1000;
camera_config_nodes["cam0"]["intrinsics"][1] = 1000;
camera_config_nodes["cam0"]["intrinsics"][2] = 960;
camera_config_nodes["cam0"]["intrinsics"][3] = 480;
std::ofstream fout("/home/alan/Desktop/test1.yaml");
fout << camera_config_nodes;
fout.close();
}
读取:
#include <yaml-cpp/yaml.h>
void main() {
// std::string yaml_str;
// const YAML::Node node = YAML::Load(yaml_str);
// YAML::Emitter out; // 利用Emitter格式化输出yaml内容
// out << node;
// std::cout << out.c_str() << std::endl;
// if (node["key"]) // 判断key是否存在
YAML::Node camera_config_nodes = YAML::LoadFile("/home/alan/Desktop/test.yaml");
int width = camera_config_nodes["width"].as<int>();
int height = camera_config_nodes["height"].as<int>();
YAML::Node cam0_node = camera_config_nodes["cam0"];
// const size_t param_size = cam0_node["intrinsics"].size();
// for (size_t i = 0; i < param_size; ++i) {
// std::cout << cam0_node["intrinsics"][i].as<double>() << std::endl;
// }
double fx = cam0_node["intrinsics"][0].as<double>();
double fy = cam0_node["intrinsics"][1].as<double>();
double cx = cam0_node["intrinsics"][2].as<double>();
double cy = cam0_node["intrinsics"][3].as<double>();
std::cout << width << " " << height << " " << fx << " " << fy << " " << cx << " " << cy << std::endl;
}
std::ifstream fin("test.yaml");
YAML::Load(fin)
YAML::Node test1 = YAML::Load("[1,2,3,4]");
cout << " Type: " << test1.Type() << endl;
YAML::Node test2 = YAML::Load("1");
cout << " Type: " << test2.Type() << endl;
YAML::Node test3 = YAML::Load("{'id':1,'degree':'senior'}");
cout << " Type: " << test3.Type() << endl;
CMakeLists.txt:
find_package(yaml-cpp REQUIRED)
include_directories(${YAML_CPP_INCLUDE_DIR})
add_executable(main src/main.cpp)
target_link_libraries(main yaml-cpp)