„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie serialisiere und deserialisiere ich eine C++-Klasse mit benutzerdefinierten Datentypen?

Wie serialisiere und deserialisiere ich eine C++-Klasse mit benutzerdefinierten Datentypen?

Veröffentlicht am 11.11.2024
Durchsuche:726

How to Serialize and Deserialize a C   Class with Custom Data Types?

Wie führt man eine Serialisierung einer Klasse mit Mitgliedern benutzerdefinierter Datentypen in C durch?

Problem

Das Ziel besteht darin, eine C-Klasse zu serialisieren und zu deserialisieren Mango, das Mitglieder benutzerdefinierter Datentypen enthält.

Implementierung

Die vorgeschlagene Implementierung umfasst Folgendes Funktionen:

std::vector serialize(Mango const& Man);
Mango                deserialize(std::span data);

void serialize_to_stream(std::ostream& os, Mango const& Man);
void deserialize(std::istream& is, Mango& Man);

Anpassungen für Datentypen

Anpassungen sind für alle relevanten Typen erforderlich (einschließlich ValType, FuntionMango, MangoType und Mango):

// Define `do_generate` and `do_parse` functions
// for custom data types.

Beispielimplementierung

void serialize_to_stream(std::ostream& os, Mango const& Man) {
    do_generate(std::ostreambuf_iterator(os), Man);
}

void deserialize(std::istream& is, Mango& Man) {
    Man = {}; // clear it!
    std::istreambuf_iterator f(is), l{};
    if (!do_parse(f, l, Man))
        throw std::runtime_error("deserialize");
}

Überlegungen zur Portabilität

  • Endianness muss möglicherweise normalisiert werden, was manuell oder mithilfe einer Bibliothek wie Boost Endian (nur Header) erfolgen kann.

Zusätzliche Hinweise

  • Dieser Ansatz ermöglicht die effiziente Speicherung und Übertragung von Daten zwischen verschiedenen Prozessen oder Systeme.

Live-Beispiel:

https://coliru.stacked-crooked.com/a/288829ec964a3ca9

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3