cpptoml 是一个用于 C++ 的开源库,旨在提供对 TOML(Tom's Obvious, Minimal Language)格式的支持。它允许开发者轻松地在 C++ 项目中读取、解析和生成 TOML 格式的配置文件。cpptoml 是一个轻量级、易于使用的库,适用于那些希望将 TOML 格式作为配置文件格式的 C++ 项目。
主要特点:
- 简洁的 API:cpptoml 提供了一个易于使用的接口,支持从 TOML 配置文件中读取各种数据类型(如整数、浮动点数、字符串、布尔值、日期等)。
- 头文件库:cpptoml 是一个纯头文件库,意味着你不需要编译库,只需要包含相应的头文件即可。
- 支持嵌套结构:cpptoml 完全支持 TOML 的嵌套表格、数组以及其他复杂的数据结构。
- 类型安全:cpptoml 提供了类型安全的接口,确保你从 TOML 文件中获取的每个值都与其预期的数据类型匹配。
安装:
由于 cpptoml 是一个头文件库,你只需要下载源代码并将其包含在你的项目中即可。你可以从 GitHub 上下载最新版本:
GitHub 地址:点击跳转
mkdir build
cd build
cmake ../
make
#config.toml
[owner]
name = "Tom Preston-Werner"
dob = "1979-05-27T07:32:00Z"[database]
server = "192.168.1.1"
ports = [ 8001, 8002, 8003 ]
connection_max = 5000
enabled = true
#include <iostream>
#include <chrono>
#include <string>
#include <sstream>
#include <iomanip>
#include <ctime>#include "cpptoml.h"int main(int argc, char *argv[])
{// 载入 TOML 文件auto config = cpptoml::parse_file("config.toml");// 读取并输出 "owner" 部分的 name 和 dobauto owner = config->get_table("owner");std::string name = owner->get_as<std::string>("name").value_or("Unknown");//std::string dob = owner->get_as<std::string>("dob").value_or("Unknown");// 解析 "dob" 字段为字符串auto dob_str = owner->get_as<std::string>("dob").value_or("");if (!dob_str.empty()) {// 转换字符串为 time_point (std::chrono)std::tm tm = {};std::istringstream ss(dob_str);ss >> std::get_time(&tm, "%Y-%m-%dT%H:%M:%SZ");if (ss.fail()) {std::cout << "Failed to parse date-time." << std::endl;return 1;}// 转换为 std::chrono::system_clock::time_pointstd::time_t t = std::mktime(&tm);auto dob = std::chrono::system_clock::from_time_t(t);// 输出时间std::time_t dob_time = std::chrono::system_clock::to_time_t(dob);std::cout << "DOB: " << std::ctime(&dob_time); // 输出类似 "Sun May 27 07:32:00 1979"} else {std::cout << "'dob' field not found!" << std::endl;}std::cout << "Owner Name: " << name << std::endl;// std::cout << "Owner DOB: " << dob << std::endl;// 读取 "database" 部分的 server 和 portsauto database = config->get_table("database");std::string server = database->get_as<std::string>("server").value_or("Unknown");auto ports = database->get_array_of<int64_t>("ports");std::cout << "Database Server: " << server << std::endl;std::cout << "Database Ports: ";for (auto &port : *ports) {std::cout << port << " ";}std::cout << std::endl;return 0;
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!