toml++ für C++: Das vollständige Handbuch mit Praxisbeispielen
1. Was ist toml++ und warum braucht man es?
TOML (Tom's Obvious Minimal Language) ist ein Konfigurationsdatei-Format, das als Alternative zu INI, YAML und JSON entwickelt wurde. Es wurde so konzipiert, dass es maximal lesbar für Menschen ist, sich eindeutig in Hash-Tabellen abbilden lässt und einfach zu parsen ist. Im Gegensatz zu YAML erlaubt TOML keine Mehrdeutigkeiten (z. B. bei Einrückungen oder Datentypen) und benötigt im Gegensatz zu JSON keine Anführungszeichen für Schlüssel und unterstützt Kommentare.
toml++ (auch bekannt als tomlplusplus) ist eine moderne, header-only Bibliothek zum Parsen und Generieren von TOML-Dateien in C++17 und höher. Sie muss nicht kompiliert werden: Sie binden einfach die Header-Datei ein und erhalten den vollen Funktionsumfang. Das macht sie zur idealen Wahl für Projekte, bei denen einfache Integration, Leistung und strenge Typisierung wichtig sind.
Warum toml++ verwenden? Erstens bietet es vollständige Unterstützung der TOML v1.0 Spezifikation, einschließlich Inline-Tabellen, Tabellen-Arrays, Daten, Uhrzeiten und lokalen Daten. Zweitens wurde es mit Fokus auf Typsicherheit geschrieben: Sie erhalten kein rohes JSON-ähnliches Objekt, sondern streng typisierte Werte (std::string, int64_t, double, bool, toml::date usw.). Drittens ist es unglaublich schnell und hat minimale Abhängigkeiten (nur die C++17 Standardbibliothek).
2. Installation
toml++ ist eine header-only Bibliothek. Das bedeutet, Sie müssen sie nicht separat kompilieren. Kopieren Sie einfach die Header-Dateien in Ihr Projekt und binden Sie sie ein.
Methode 1: Vcpkg (empfohlen für Windows und Linux)
# Installation über vcpkg
vcpkg install tomlplusplus
# Einbindung in CMakeLists.txt
find_package(tomlplusplus CONFIG REQUIRED)
target_link_libraries(my_project PRIVATE tomlplusplus::tomlplusplus)
Methode 2: Conan
# Installation über Conan
conan install tomlplusplus/3.4.0@
# In conanfile.txt
[requires]
tomlplusplus/3.4.0
[generators]
CMakeDeps
Methode 3: Manuelle Installation (am einfachsten)
# Laden Sie das neueste Release von GitHub herunter
wget https://github.com/marzer/tomlplusplus/archive/refs/tags/v3.4.0.tar.gz
tar -xzf v3.4.0.tar.gz
# Kopieren Sie den Ordner include/toml++ in Ihr Projekt
cp -r tomlplusplus-3.4.0/include/toml++ /pfad/zu/ihrem/projekt/include/
# In Ihrem Code einfach einbinden:
#include <toml++/toml.h>
Methode 4: CMake FetchContent (für CMake-Projekte)
include(FetchContent)
FetchContent_Declare(
tomlplusplus
GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
GIT_TAG v3.4.0
)
FetchContent_MakeAvailable(tomlplusplus)
target_link_libraries(my_project PRIVATE tomlplusplus::tomlplusplus)
3. Schnellstart – Minimales funktionierendes Beispiel
Erstellen wir eine Datei config.toml:
# config.toml
title = "Beispielkonfiguration"
[server]
host = "localhost"
port = 8080
debug = true
[datenbank]
name = "mydb"
user = "admin"
password = "geheim123"
Jetzt schreiben wir C++-Code zum Einlesen:
#include <toml++/toml.h>
#include <iostream>
#include <filesystem>
int main() {
// 1. Datei parsen
auto config = toml::parse_file("config.toml");
// 2. Einfache Werte auslesen
std::string title = config["title"].value_or("standard");
std::cout << "Titel: " << title << std::endl;
// 3. Verschachtelte Tabellen auslesen
auto server = config["server"];
std::string host = server["host"].value_or("localhost");
int port = server["port"].value_or(3000);
bool debug = server["debug"].value_or(false);
std::cout << "Server: " << host << ":" << port << std::endl;
std::cout << "Debug-Modus: " << (debug ? "an" : "aus") << std::endl;
return 0;
}