toml11: C++ TOML 解析完全指南

引言 在程序配置领域,TOML(Tom’s Obvious, Minimal Language)凭借其直观的语法和强类型特性,逐渐成为 JSON 和 YAML 的有力替代者。与 JSON 相比,TOML 支持注释、更易于手写;与 YAML 相比,TOML 语法更严格、歧义更少。 toml11 是一个现代 C++17 的 TOML 解析库,以header-only、类型安全、异常友好著称。utilsxx 将其作为外部组件集成到 lib/toml.hpp 中,方便项目直接使用。本文将基于 toml11 的完整功能,结合 utilsxx 中的示例,带你彻底掌握 TOML 在 C++ 中的读写技巧。 一、TOML 速览 1.1 为什么选择 TOML? 特性 TOML JSON YAML 注释支持 ✅ ❌ ✅ 强类型 ✅ ✅ ❌(隐式转换多) 手写友好 ✅ ⚠️ ⚠️(缩进敏感) 日期时间 ✅ 原生 ❌ ✅ 表(Table) ✅ ❌(用对象模拟) ✅ 歧义性 低 低 高 1.2 TOML 核心语法 # 这是注释 # 键值对(基本类型) title = "TOML Example" enabled = true port = 8080 pi = 3.14159 # 表(类似 JSON 的对象) [owner] name = "Tom Preston-Werner" dob = 1979-05-27T07:32:00-08:00 # 嵌套表 [servers.alpha] ip = "10.0.0.1" role = "frontend" # 数组 ports = [8000, 8001, 8002] # 表数组(数组的每个元素是一个表) [[products]] name = "Hammer" sku = 738594937 [[products]] name = "Nail" sku = 284758393 二、快速上手 2.1 解析 TOML 文件 #include "toml.hpp" #include <iostream> int main() { // 解析文件 const auto root = toml::parse("config.toml"); // 获取值 std::string title = toml::find<std::string>(root, "title"); std::cout << "Title: " << title << std::endl; return 0; } 2.2 两种访问方式 toml11 提供两种访问风格: ...

May 10, 2026 · 张壹