"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo serializar y deserializar una clase C++ con tipos de datos personalizados?

¿Cómo serializar y deserializar una clase C++ con tipos de datos personalizados?

Publicado el 2024-11-11
Navegar:229

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

¿Cómo realizar la serialización de una clase que tiene miembros de tipos de datos personalizados en C?

Problema

El objetivo es serializar y deserializar una clase C Mango que contiene miembros de tipos de datos personalizados.

Implementación

La implementación sugerida incluye lo siguiente funciones:

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);

Personalizaciones para tipos de datos

Se requieren personalizaciones para todos los tipos relevantes (incluidos ValType, FuntionMango, MangoType y Mango):

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

Ejemplo de implementación

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");
}

Consideraciones de portabilidad

  • Es posible que sea necesario normalizar la endianidad, lo que se puede hacer manualmente o usando una biblioteca como Boost Endian (solo encabezado).

Notas adicionales

  • Este enfoque permite almacenar y transferir datos de manera eficiente entre diferentes procesos o sistemas.

Ejemplo en vivo:

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

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3