cereal C++: Vollständiges Tutorial mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist cereal und warum wird es benötigt?

cereal ist eine schlanke, header-only Bibliothek zur Datenserialisierung in C++. Sie ermöglicht es, komplexe Datenstrukturen (Klassen, Strukturen, STL-Container) in Formate wie JSON, XML und Binärformat zu konvertieren und anschließend wiederherzustellen. Dies ist entscheidend für das Speichern des Programmzustands, die Datenübertragung über Netzwerke, das Logging oder den Datenaustausch zwischen verschiedenen Programmiersprachen.

Im Gegensatz zu schwergewichtigeren Lösungen (z. B. Boost.Serialization) erfordert cereal keine vorherige Kompilierung oder komplexe Konfiguration. Es besteht vollständig aus Header-Dateien, was die Integration in jedes Projekt vereinfacht. Die Hauptvorteile sind:

  • Header-only: Keine separate Bibliothekskompilierung nötig.
  • Unterstützt C++11/14/17: Nutzt moderne Sprachfeatures.
  • Flexibilität: Unterstützt benutzerdefinierte Typen, Smart Pointer und Polymorphie.
  • Leistung: Das Binärformat ist sehr schnell und kompakt.

Installation

Da cereal eine header-only Bibliothek ist, beschränkt sich die Installation auf das Kopieren der Header-Dateien in Ihr Projekt. Es sind keine pip install oder npm install für C++ erforderlich. Hier sind die zwei wichtigsten Methoden:

Methode 1: Manuelle Installation (empfohlen zum Lernen)

  1. Laden Sie die neueste Version von GitHub herunter (grüner Button "Code" → "Download ZIP").
  2. Entpacken Sie das Archiv.
  3. Kopieren Sie den Ordner include/cereal in Ihren Projektordner.
  4. Binden Sie es im Code ein: #include "cereal/cereal.hpp".

Methode 2: Über den Paketmanager vcpkg

# Installieren Sie vcpkg, falls noch nicht geschehen
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat  # Windows
./bootstrap-vcpkg.sh   # Linux/macOS

# Installieren Sie cereal
.\vcpkg install cereal  # Windows
./vcpkg install cereal  # Linux/macOS

# Binden Sie es in CMakeLists.txt ein:
# find_package(cereal CONFIG REQUIRED)
# target_link_libraries(your_project PRIVATE cereal::cereal)

Schnellstart mit Codebeispiel

Erstellen wir eine einfache Struktur Person und serialisieren sie in JSON. Erstellen Sie eine Datei main.cpp:

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

struct Person {
    std::string name;
    int age;

    // Erforderliche Methode für cereal
    template<class Archive>
    void serialize(Archive& archive) {
        archive(name, age);
    }
};

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

    // In Datei schreiben
    {
        std::ofstream file("person.json");
        cereal::JSONOutputArchive archive(file);
        archive(CEREAL_NVP(p1));  // CEREAL_NVP für benannte Felder
    }

    // Aus Datei lesen
    Person p2;
    {
        std::ifstream file("person.json");
        cereal::JSONInputArchive archive(file);
        archive(p2);
    }

    std::cout << "Name: " << p2.name << ", Alter: " << p2.age << std::endl;
    return 0;
}

Kompilieren Sie mit: g++ -std=c++11 main.cpp -o main. Nach dem Ausführen erscheint die Datei person.json mit dem Inhalt {"p1": {"name": "Alice", "age": 30}}.

Wichtige Methoden und Funktionen

Nachfolgend finden Sie die wichtigsten Elemente der Bibliothek. Alle Beispiele setzen #include <cereal/cereal.hpp> und die entsprechenden Archive voraus.

1. cereal::JSONOutputArchive

Funktion: Erstellt ein Archiv zum Schreiben von Daten im JSON-Format.

Parameter: Erwartet eine Referenz auf einen std::ostream.

Empfehlungen