Is it safe to serialize a raw boost::variant?
Try just including boost/serialization/variant.hpp; it does the work for you.
Regarding serialisation: It should work, yes. But why don't you use boost::variant
's visitation mechanism to write out the actual type contained in the variant?
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;
}
Regarding shared memory: boost::variant
does not perform heap allocations, so you can place it into shared memory just like an int
, assuming proper synchronisation, of course.
Needless to say, as you said, the above is only valid if the variant can only contain POD types.