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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top