Ist es sicher, einen rohen Boost :: Variante zu serialisieren?
-
19-09-2019 - |
Frage
Boost :: Variante behauptet, dass es sich um einen Werttyp handelt. Bedeutet dies, dass es sicher ist, einfach die rohe Darstellung eines Boost :: Variante auszuschreiben und später zurückzuladen, solange sie nur Pod -Typen enthält? Angenommen, es wird durch den Code, der von demselben Compiler und derselben Version von Boost zusammengestellt wird, auf derselben Architektur neu geladen.
Kann auch (wahrscheinlich) gleichwertig :: Variante im gemeinsamen Speicher steigern?
Lösung
In Bezug auf Serialisierung: Es sollte funktionieren, ja. Aber warum benutzt du nicht? boost::variant
'S Visitation Mechanismus, um den in der Variante enthaltenen tatsächlichen Typ aufzuschreiben?
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;
}
In Bezug auf gemeinsame Speicher: boost::variant
führt keine Heap -Zuweisungen durch int
, Natürlich unter der Annahme einer ordnungsgemäßen Synchronisation.
Unnötig zu erwähnen, wie Sie sagten, ist das oben genannte nur dann gültig, wenn die Variante nur POD -Typen enthalten kann.
Andere Tipps
Versuchen Sie, nur Boost/Serialisation/Variante zu beinhalten.HPP; Es macht die Arbeit für Sie.