He el siguiente problema ..Boost serialización/deserialización archivo "error de corriente" excepción
tengo un archivo llamado A.h y un archivo B.H. cada uno contiene alguna estructura como esta: (las estructuras dentro de las dos clases son diferentes)
struct Base
{
friend class access;
template <typename Archive>
void serialize(Archive& ar,const unsigned int version)
{
ar & fieldLength;
ar & fieldMD;
ar & fieldTime_Stamp;
}
public:
unsigned int fieldLength;
unsigned int fieldMD;
unsigned int fieldTime_Stamp;
virtual void f(){} //to be polymorphic the struct
};
struct Derived:public Base
{
...
}
Así que serializar el struct a la manera clásica:
....
std::ostringstream archive_stream;
boost::archive::text_oarchive archive(archive_stream);
archive.register_type(static_cast<Derived*>(NULL))
archive <<p; // where p is a pointer to Base
ahora el problema ... en la lado de deserialización, sigo el mismo procedimiento (inverso) ... si deserializo singularmente las estructuras en Ah (sin incluir en el proyecto Bh) y las estructuras en Bh (sin incluir en el proyecto Ah) todo funciona ... pero Si incluyo en el proyecto ambas clases, la deserialización funciona para una clase, pero arroja la "excepción de error de secuencia" en el arco de instrucciones " colmena >> m; " para el otro ... parece un conflicto en la clase de registro o algo así ... ¿Alguna idea? Gracias ...
Muestre su código de deserialización real. – ildjarn
std :: istringstream archive_stream (mex); // mex es la información serializada recibida del socket \t boost :: archive :: text_iarchive archive (archive_stream); archive.register_type (static_cast (NULL)); ... \t Base * m; archivo >> m; –
marco
He observado que tengo un conflicto en el registro de la clase a través del archivo.register_type(), a pesar de que creo dos (local) text_iarchive en procesos separados (utilizo el tenedor) ... de hecho, si hago un comentario el código de registro del segundo proceso, todo funciona ... ¿cómo es posible? – marco