3

boost::interprocess::containers::vector でブースト シリアル化を使用したい

std::vector のシリアル化は、含めることで正常に機能します

#include <boost/interprocess/containers/vector.hpp>

しかし、共有ベクトルを含むクラスがあります

class MyClass {
  public:
    typedef boost::interprocess::allocator<double, SegmentManager> Allocator;
    typedef boost::interprocess::vector<double, Allocator > VectorDouble;
    VectorDouble *pVar;

    template<class archive>  
    void serialize ( archive &ar, const unsigned int version ) {
        using boost::serialization::make_nvp;
        ar & make_nvp ( "data", *pVar; );  # This does not work
        # what works it creating a std::vector and copy the data
    }
...
    MyClass(){
      # creating the shared memory and the pointer ot pVarß
    }

    ~MyClass(){
      # release data
    }
}

エラーが発生しています:

error: ‘class boost::container::vector<double, boost::interprocess::allocator<double, boost::interprocess::segment_manager<char, boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family, boost::interprocess::offset_ptr<void>, 0u>, boost::interprocess::iset_index> > >’ has no member named ‘serialize’
4

2 に答える 2

0

ブーストシリアライゼーションライブラリを見ると、何かをシリアライズする方法を手動で定義する必要があります。できることは、基本型をシリアル化することだけです。そのためには、「分解」する必要があります。したがって、エラーが示すように、必要なシリアル化メソッドがないか、邪魔にならないようにするかどうかに応じて、独自の外部シリアル化メソッドを作成できます。

ここのチュートリアルはとても役に立ちます:):

http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/index.html

于 2013-07-15T17:42:03.723 に答える