6

boost::variantは、それが値型であると主張しています。これは、POD タイプのみが含まれている限り、boost::variant の生の表現を単純に書き出して、後でロードし直すことが安全であることを意味しますか? 同じアーキテクチャで、同じコンパイラと同じバージョンのブーストでコンパイルされたコードによって再ロードされると仮定します。

また、(おそらく) 同様に、boost::variant を共有メモリで使用できますか?

4

3 に答える 3

15

boost/serialization/variant.hpp だけを含めてみてください。それはあなたのために仕事をします。

于 2010-08-06T01:36:13.830 に答える
7

シリアライゼーションについて:はい、うまくいくはずです。しかし、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 タイプのみを含めることができる場合にのみ有効です。

于 2009-07-28T19:20:07.090 に答える