boost::variantは、それが値型であると主張しています。これは、POD タイプのみが含まれている限り、boost::variant の生の表現を単純に書き出して、後でロードし直すことが安全であることを意味しますか? 同じアーキテクチャで、同じコンパイラと同じバージョンのブーストでコンパイルされたコードによって再ロードされると仮定します。
また、(おそらく) 同様に、boost::variant を共有メモリで使用できますか?
boost::variantは、それが値型であると主張しています。これは、POD タイプのみが含まれている限り、boost::variant の生の表現を単純に書き出して、後でロードし直すことが安全であることを意味しますか? 同じアーキテクチャで、同じコンパイラと同じバージョンのブーストでコンパイルされたコードによって再ロードされると仮定します。
また、(おそらく) 同様に、boost::variant を共有メモリで使用できますか?
boost/serialization/variant.hpp だけを含めてみてください。それはあなたのために仕事をします。
シリアライゼーションについて:はい、うまくいくはずです。しかし、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
言うまでもなく、あなたが言ったように、上記はバリアントに POD タイプのみを含めることができる場合にのみ有効です。