cpptoml介绍

 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.mzph.cn/diannao/63774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unreal Engine 中的UI界面开发

推荐的使用方式 轻量级 HUD&#xff1a;使用 Canvas 绘制简单的文本、调试信息或基础 UI&#xff08;如准星、血量条等&#xff09;。 复杂 UI&#xff1a;使用 UMG&#xff08;Unreal Motion Graphics&#xff09;和 Slate 进行布局和交互&#xff0c;避免手动管理 Canvas 绘制…

构建一款未来派的霓虹太空射击游戏,由 Gladiators Battle 打造具有史诗般的 Boss 战

在不断发展的 Web 开发世界中&#xff0c;创建引人入胜的交互式体验是吸引受众的关键。今天&#xff0c;我们将踏上激动人心的旅程&#xff0c;打造一款未来派的霓虹太空射击游戏&#xff0c;具有先进的动画、令人上瘾的游戏玩法和史诗般的 Boss 战。该游戏完全使用 HTML5 Canv…

公有云和私有云的区别

目录 ​1、公有云&#xff08;PublicClouds&#xff09; ​2、私有云&#xff08;PrivateClouds&#xff09; ​2.1 私有云又分为两种 3、混合云&#xff08;hybrid cloud&#xff09; ​3.1 公有云和私有云的区别 ​3.2 选择公有云或者是私有云 4 政务云&#xff08;Go…

嵌入式硬件-- 元器件焊接

1.锡膏的使用 锡膏要保存在冰箱里。 焊接排线端子&#xff1b;138度的低温锡&#xff08;锡膏&#xff09;&#xff0c; 第一次使用&#xff0c;直接拿东西挑一点涂在引脚上&#xff0c;不知道多少合适&#xff0c;加热台加热到260左右&#xff0c;放在上面观察锡融化&#…

六、nginx负载均衡

负载均衡&#xff1a;将四层或者七层的请求分配到多台后端的服务器上。 从而分担整个业务的负载。提高系统的稳定性&#xff0c;也可以提高高可用&#xff08;备灾&#xff0c;其中一台后端服务器如果发生故障不影响整体业务&#xff09;. 负载均衡的算法 round robin 轮询 r…

【C++算法】40.模拟_N 字形变换

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a; 题目链接&#xff1a; 6. N 字形变换 题目描述&#xff1a; 解法 解法一&#xff1a;模拟 a,b,c,d,e,f,g...... n4 弄个矩阵放进去&#xff0c;最后从左往右读取。 解法二&#xff1a;模拟优化-…

访问者模式的理解和实践

在软件开发过程中&#xff0c;设计模式为我们提供了解决常见问题的最佳实践。访问者模式&#xff08;Visitor Pattern&#xff09;是行为设计模式之一&#xff0c;它将数据操作与数据结构分离&#xff0c;使得在不修改数据结构的前提下&#xff0c;能够定义作用于这些元素的新的…

Jenkins:持续集成与持续部署的利器

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Jenkins 2、Jenkins的起源 二、Jenkins的核心…

配置ingress将service中的端口暴露出去

service是管理pod的暴露的,但是每个service都暴露一个端口到外部并不是很合适。使用ingress将不同的service暴露的端口通过子url的方式做反向代理,使用7层代理方式暴露给外部。 配置ingress-nginx需要先按照前面讲解的安装方式安装一下,然后就可以修改helm的values.yaml配置…

java中的数组(4)

大家好&#xff0c;今天是java数组的最后一篇&#xff0c;我来为大家介绍数组中一些常见用法&#xff0c;那么我们直接发车。 五.作为函数的返回值. 1数组对象在堆上,不会因为局部变量的销段而销毁. 2.new开辟新空间. 3.数组对象是在堆上的. 4.引用变量目前是在main函数里…

从SRE视角透视DevOps的构建精髓

SRE 侧重系统稳定性&#xff0c;DevOps 强调开发运维协作。SRE 实践助力DevOps&#xff0c;提升系统稳定性与团队协作效率。 SRE 运用软件工程的原理&#xff0c;将系统管理员的手工任务自动化&#xff0c;负责运维由系统组件构成的服务&#xff0c;确保服务稳定运行。SRE职责涵…

孚盟云 MailAjax.ashx SQL漏洞复现

0x01 产品描述: ‌孚盟云‌是由

关于Redis哨兵机制实验操作步骤

需要搭建帮助的可以去taobao搜索Easy Company技术服务&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 需要搭建帮助的可以去taobao搜索Easy Company技术服务&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 一、配置哨兵(sentinel) 创建三个哨兵配置文件&…

基于51单片机的智能门禁系统设计与实现

1. 项目背景与需求分析 随着社会的不断发展&#xff0c;智能化门禁系统在现代安全领域应用越来越广泛。智能门禁系统通过单片机的控制功能&#xff0c;结合指纹模块和液晶显示模块&#xff0c;能够实现便捷、高效、安全的身份认证管理。基于STC89C52单片机的设计&#xff0c;具…

【大前端vue:组件】vue鼠标滑动:平滑滚动效果 向左、向右

【大前端vue&#xff1a;组件】vue鼠标滑动&#xff1a;平滑滚动效果 向左、向右 <template><div class"tab-container"><div class"tab-wrapper"><h2 class"main-title">鼠标滑动&#xff1a;平滑滚动效果 向左、向右…

某养老产业公司管理诊断项目成功案例纪实

某养老产业公司管理诊断项目成功案例纪实 ——从短期和长期出发&#xff0c;提供转型改革建议 【客户行业】养老行业 【问题类型】问题诊断 【客户背景】 某养老产业公司是一家主要从事养老服务为主的企业&#xff0c;主营业务包括社区养老服务、居家养老、康复训练服务等…

什么叫中间件服务器?

什么叫中间件服务器&#xff1f;它在软件架构中扮演着怎样的角色&#xff1f;在现代应用程序开发中&#xff0c;中间件服务器的概念很多人对它并不太熟悉&#xff0c;但其实它的作用却不小。 中间件服务器是一种连接不同软件应用程序的中介。想象一下&#xff0c;在一个大型企…

牛客周赛71(字符串,状压dp)

目录 B. 宝石手串 D. 气球谜题 B. 宝石手串 &#xff08;1&#xff09;两种扩容方式&#xff1a; // 法一&#xff1a;直接加&#xff08;通常用于拼接字符串&#xff09;s s// 法二&#xff1a;一个一个字符加&#xff08;用于加单个字符&#xff09;for (…

Python的3D可视化库【vedo】1-4 (visual模块) 体素可视化、光照控制、Actor2D对象

文章目录 6. VolumeVisual6.1 关于体素6.2 显示效果6.2.1 遮蔽6.2.2 木纹或磨砂效果 6.3 颜色和透明度6.3.1 透明度衰减单位6.3.2 划分透明度标量梯度6.3.3 设置颜色或渐变6.3.4 标量的计算模式6.3.5 标量的插值方式 6.4 过滤6.4.1 按单元格id隐藏单元格6.4.2 按二进制矩阵设置…

DAY5 C++运算符重载

1.类实现> 、<、!、||、&#xff01;和后自增、前自减、后自减运算符的重载 代码&#xff1a; #include <iostream>using namespace std; class Complex {int rel;int vir; public:Complex(){};Complex(int rel,int vir):rel(rel),vir(vir){cout << "…