生のブースト::バリアントをシリアル化するのは安全ですか?
-
19-09-2019 - |
質問
ブースト::バリアント 値の種類であると主張しています。これは、ポッドタイプのみが含まれている限り、ブースト::バリアントの生の表現を単純に書き留めて後でロードしても安全であることを意味しますか?同じアーキテクチャで、同じコンパイラと同じバージョンのBoostによってコンパイルされたコードによってリロードされると仮定します。
また、(おそらく)同等に、boost :: variantを共有メモリで使用できますか?
解決
シリアル化に関して:はい、それは機能するはずです。しかし、なぜあなたは使ってみませんか boost::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;
}
共有メモリについて: boost::variant
ヒープ割り当てを実行しないので、それを共有メモリに配置することができます int
, 、もちろん、適切な同期を仮定します。
言うまでもなく、あなたが言ったように、上記はバリアントにポッドタイプのみを含めることができる場合にのみ有効です。
他のヒント
boost/serialization/variant.hppを含めてみてください。それはあなたのために仕事をします。
所属していません StackOverflow