Pergunta

Boost :: Variante alega que é um tipo de valor. Isso significa que é seguro simplesmente escrever a representação bruta de um impulso :: variante e carregá -la mais tarde, desde que contém apenas tipos de pod? Suponha que ele seja recarregado pelo código compilado pelo mesmo compilador e a mesma versão do Boost, na mesma arquitetura.

Além disso, (provavelmente) equivalentemente, o Boost :: Variante pode ser usado na memória compartilhada?

Foi útil?

Solução

Em relação à serialização: deve funcionar, sim. Mas por que você não usa boost::variantO mecanismo de visitação de escrever o tipo real contido na 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;
}

Em relação à memória compartilhada: boost::variant não executa alocações de heap, então você pode colocá -lo em memória compartilhada como um int, assumindo a sincronização adequada, é claro.

Escusado será dizer que, como você disse, o acima é válido apenas se a variante puder conter apenas tipos de pod.

Outras dicas

Tente apenas incluir Boost/Serialization/Variant.hpp; Faz o trabalho para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top