cpptoml介绍

ops/2024/12/13 12:11:08/

 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;
}

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 


http://www.ppmy.cn/ops/141532.html

相关文章

【云原生知识】Kubernets实践-前端服务如何访问后端服务

文章目录 概述步骤1&#xff1a;部署后端服务步骤2&#xff1a;配置Nginx步骤3&#xff1a;创建Nginx服务总结 如何确保 Nginx 能持续访问后端服务&#xff1f;相关文献 概述 假设你正在使用Kubernetes作为容器云平台&#xff0c;以下是如何配置Nginx以及相关服务&#xff0c;…

解决uView2.0(离线/断网/内网)状态下icon图标不显示的问题

原因: uview的u-icon组件中 引用了线上的字体地址 解决: 1.找到 uview-ui/components/u-icon/u-icon.vue 文件 2.可以看到引用的字体地址,下载ttf文件 字体文件地址: https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf 3.下载好的字体文件放到与 u-icon.vue文件 同…

使用HBuilderX 进行uniapp 打包Android APK

文章概览 公司业务项目需要打包apk上传的应用市场&#xff0c;打包过程、上架过程、审核驳回等遇到的问题解决&#xff0c;以及操作步骤。 打包-配置 HBuilder X打包APK 基础配置 应用版本名称/应用版本号&#xff1a;设置必须比上一个版本的值高 APP启动界面配置 Android…

小红书笔记采集链接版 | 同步飞书

一、下载影刀&#xff1a; https://www.winrobot360.com/share/activity?inviteUserUuid595634970300317698 二、加入应用市场 https://www.yingdao.com/share/accede/?inviteKeyb2d3f22a-fd6c-4a10-93a4-7de3492ee7fe 三、下载谷歌浏览器 &#xff08;如果电脑已有谷歌…

机器学习学习笔记-20241211

文章目录 空间归纳偏置局部性&#xff08;Locality&#xff09;平移不变性&#xff08;Translation Invariance&#xff09;空间关系&#xff08;Spatial Relationships&#xff09;尺度不变性&#xff08;Scale Invariance&#xff09;上下文依赖&#xff08;Context Dependen…

【爬虫】selenium打开浏览器以及页面

本篇探讨如何使用 selenium 打开浏览器 selenium 基础与网页打开 selenium 是一个广泛应用于自动化测试和网页抓取的工具&#xff0c;它能够模拟用户在浏览器中的各种操作。首先&#xff0c;我们需要根据指定的浏览器类型&#xff08;这里以 Chrome 为例&#xff09;打开网页…

vue 给div增加title属性

省略号 移入显示文字 在很多时候&#xff0c;我们页面上其实有时候展示不出来很多很多文字的&#xff0c;这个时候我们就不得不对这个文字进行处理&#xff0c;但是我们鼠标放到文字上时&#xff0c;还想展示所有的文字&#xff0c;这种方式其实有2种 一Tooltip 文字提示 第一…

共享无人系统,便捷生活触手可得

共享无人系统适用各种无人场景:共享麻将室、共享茶室、共享健身房、共享自习室、共享桌球室&#xff0c;实现线上预约&#xff0c;一键预约&#xff0c;自由组合时间&#xff0c;智能通断电&#xff0c;智能语音提醒。 优惠券是常用的营销工具&#xff0c;后台创建之后发放给会…