yaml-cpp pour C++ : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

yaml-cpp pour C++ : guide complet avec exemples

1. Qu'est-ce que yaml-cpp et pourquoi l'utiliser ?

yaml-cpp est une bibliothèque C++ moderne et légère pour analyser (parser) et générer des fichiers YAML. YAML (YAML Ain't Markup Language) est un format de sérialisation de données lisible par l'homme, couramment utilisé pour les fichiers de configuration, la description de structures de données, les pipelines CI/CD (par exemple, GitHub Actions, GitLab CI) et l'échange de données entre services. Contrairement à JSON, YAML prend en charge les commentaires, les chaînes multilignes, les ancres et les alias, ce qui le rend idéal pour les configurations.

Pourquoi utiliser yaml-cpp ? Si vous développez une application en C++ qui doit lire des fichiers de configuration (paramètres serveur, configuration de modèle de machine learning, description de dépendances), yaml-cpp offre une API simple et type-safe. La bibliothèque est entièrement conforme à la spécification YAML 1.2, prend en charge tous les types de données (scalaires, séquences, mappings) et permet de convertir facilement des documents YAML en structures C++ et vice-versa.

Avantages clés : dépendances minimales (uniquement la bibliothèque standard C++11/14/17), compilation optionnelle en header-only, support Unicode, sérialisation personnalisable pour vos propres types, et une communauté active (plus de 5 000 étoiles sur GitHub).

2. Installation

Contrairement à pip ou npm, yaml-cpp ne s'installe pas via des gestionnaires de paquets de langage. Pour C++, on utilise les gestionnaires de paquets système ou une compilation depuis les sources.

Linux (Debian/Ubuntu)

sudo apt-get install libyaml-cpp-dev

macOS (Homebrew)

brew install yaml-cpp

Windows (vcpkg)

vcpkg install yaml-cpp

Compilation depuis les sources (CMake)

git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build && cd build
cmake -DYAML_BUILD_SHARED_LIBS=ON ..
make
sudo make install

Après l'installation, liez la bibliothèque dans votre CMakeLists.txt :

find_package(yaml-cpp REQUIRED)
target_link_libraries(my_project yaml-cpp)

3. Démarrage rapide — exemple minimal fonctionnel

Créez un fichier config.yaml :

server:
  host: "localhost"
  port: 8080
debug: true

Lisons-le avec yaml-cpp :

#include <iostream>
#include <yaml-cpp/yaml.h>

int main() {
    // Chargement du fichier YAML
    YAML::Node config = YAML::LoadFile("config.yaml");
    
    // Lecture des valeurs
    std::string host = config["server"]["host"].as<std::string>();
    int port = config["server"]["port"].as<int>();
    bool debug = config["debug"].as<bool>();
    
    std::cout << "Host: " << host << "\n";
    std::cout << "Port: " << port << "\n";
    std::cout << "Debug: " << std::boolalpha << debug << "\n";
    
    return 0;
}

Compilation : g++ -std=c++17 main.cpp -lyaml-cpp -o app

4. Méthodes / fonctions / classes principales

4.1. YAML::Node — la classe centrale pour manipuler les nœuds

Signature : class YAML::Node

Description : Représente n'importe quel élément d'un document YAML : scalaire, séquence (tableau) ou mapping (dictionnaire). Prend en charge l'itération, l'accès par clé/index et la vérification de type.

YAML::Node node;
node["name"] = "Alice";
node["age"] = 30;
node["hobbies"].push_back("lecture");
node["hobbies"].push_back("programmation");

std::cout << node["name"].as<std::string>() << "\n"; // Alice
std::cout << node["hobbies"][0].as<std::string>() << "\n"; // lecture

4.2. YAML::LoadFile() — chargement depuis un fichier

Signature :

Recommendations