質問

ブースト::バリアント 値の種類であると主張しています。これは、ポッドタイプのみが含まれている限り、ブースト::バリアントの生の表現を単純に書き留めて後でロードしても安全であることを意味しますか?同じアーキテクチャで、同じコンパイラと同じバージョンの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を含めてみてください。それはあなたのために仕事をします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top