É seguro serializar um impulso bruto :: variante?
-
19-09-2019 - |
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?
Solução
Em relação à serialização: deve funcionar, sim. Mas por que você não usa boost::variant
O 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ê.