cereal 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

Qu'est-ce que cereal et pourquoi l'utiliser ?

cereal est une bibliothèque de sérialisation légère et "header-only" pour le langage C++. Elle permet de convertir des structures de données complexes (classes, structures, conteneurs STL) en formats tels que JSON, XML et format binaire, puis de les restaurer. C'est essentiel pour sauvegarder l'état d'un programme, transmettre des données sur un réseau, journaliser ou échanger des informations entre différents langages de programmation.

Contrairement à des solutions plus lourdes (comme Boost.Serialization), cereal ne nécessite ni compilation préalable ni configuration complexe. Elle est entièrement composée de fichiers d'en-tête, ce qui simplifie son intégration dans n'importe quel projet. Ses principaux avantages :

  • Header-only : pas besoin de compiler la bibliothèque séparément.
  • Support C++11/14/17 : utilise les fonctionnalités modernes du langage.
  • Flexibilité : prend en charge les types personnalisés, les pointeurs intelligents, le polymorphisme.
  • Performance : le format binaire est très rapide et compact.

Installation

Puisque cereal est une bibliothèque "header-only", l'installation se résume à copier les fichiers d'en-tête dans votre projet. Pas de pip install ou npm install pour C++ requis. Voici deux méthodes principales :

Méthode 1 : Installation manuelle (recommandée pour l'apprentissage)

  1. Téléchargez la dernière version depuis GitHub (bouton vert "Code" → "Download ZIP").
  2. Décompressez l'archive.
  3. Copiez le dossier include/cereal dans le dossier de votre projet.
  4. Dans votre code, incluez : #include "cereal/cereal.hpp".

Méthode 2 : Via le gestionnaire de paquets vcpkg

# Installez vcpkg si ce n'est pas déjà fait
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat  # Windows
./bootstrap-vcpkg.sh   # Linux/macOS

# Installez cereal
.\vcpkg install cereal  # Windows
./vcpkg install cereal  # Linux/macOS

# Ajoutez dans CMakeLists.txt :
# find_package(cereal CONFIG REQUIRED)
# target_link_libraries(votre_projet PRIVATE cereal::cereal)

Premiers pas avec un exemple de code

Créons une structure simple Personne et sérialisons-la en JSON. Créez un fichier main.cpp :

#include <iostream>
#include <fstream>
#include <string>
#include <cereal/archives/json.hpp>
#include <cereal/types/string.hpp>

struct Personne {
    std::string nom;
    int age;

    // Méthode obligatoire pour cereal
    template<class Archive>
    void serialize(Archive& archive) {
        archive(nom, age);
    }
};

int main() {
    Personne p1{"Alice", 30};

    // Écriture dans un fichier
    {
        std::ofstream fichier("personne.json");
        cereal::JSONOutputArchive archive(fichier);
        archive(CEREAL_NVP(p1));  // CEREAL_NVP pour des champs nommés
    }

    // Lecture depuis un fichier
    Personne p2;
    {
        std::ifstream fichier("personne.json");
        cereal::JSONInputArchive archive(fichier);
        archive(p2);
    }

    std::cout << "Nom : " << p2.nom << ", Âge : " << p2.age << std::endl;
    return 0;
}

Compilez : g++ -std=c++11 main.cpp -o main. Après exécution, le fichier personne.json contiendra {"p1": {"nom": "Alice", "age": 30}}.

Méthodes et fonctions principales

Voici les éléments clés de la bibliothèque. Tous les exemples supposent #include <cereal/cereal.hpp> et les archives correspondantes.

1. cereal::JSONOutputArchive

Fonction : Crée une archive pour écrire des données au format JSON.

Paramètres : Prend une référence à un std::ostream

Recommendations