¿Es seguro para serializar un impulso prima :: variante?
-
19-09-2019 - |
Pregunta
impulso :: variante afirma que es un tipo de valor. ¿Quiere decir esto que es seguro es simplemente escribir la representación cruda de un impulso :: variante y cargar de nuevo más tarde, con tal de que sólo contiene los tipos de POD? Supongamos que se volverá a cargar el código compilado por el mismo compilador, y la misma versión de impulso, en la misma arquitectura.
Además, (probablemente) que es equivalente, puede impulsar :: variante ser utilizado en la memoria compartida?
Solución
En cuanto a la serialización: Se debe trabajar, sí. Pero, ¿por qué no utilizar el mecanismo de visitas del boost::variant
para escribir el tipo real contenida en la variante?
struct variant_serializer : boost::static_visitor<void> {
template <typename T>
typename boost::enable_if< boost::is_pod<T>, void>::type
operator()( const T & t ) const {
// ... serialize here, e.g.
std::cout << t;
}
};
int main() {
const boost::variant<int,char,float,double> v( '1' );
variant_serializer s;
boost::apply_visitor( s, v );
return 0;
}
En cuanto a la memoria compartida: boost::variant
no realiza asignaciones del montón, por lo que se puede colocar en la memoria compartida al igual que un int
, suponiendo una correcta sincronización, por supuesto
No es necesario decir, como usted ha dicho, lo anterior sólo es válida si la variante sólo puede contener tipos de POD.
Otros consejos
Trate simplemente incluyendo realce / serialización / variant.hpp; que hace el trabajo por usted.