Boost.Serialization和Boost.Python双向泡菜

fox*_*cub 5 c++ python boost pickle boost-serialization

我有一个使用Boost.Serialization的C++库.我正在使用Boost.Python为这个库创建Python绑定.很明显如何为Boost.Python创建一个使用Boost.Serialization的pickle套件(使用Boost.Serialization保存到一个字符串,并将该字符串返回给Python).

我想要的是相反的:给定a boost::python::object,我想要一个serialize(...)函数来调用Python的pickle.dumps()函数并序列化结果字符串.(想象一下std::vector<boost::python::object>.当我序列化这个向量时,Boost.Serialization会调用辅助serialize()函数.)这可能吗?更好的是,是否可以使用cPickle和绕过将控件提供给Python解释器?

nbe*_*ker 0

这是我用来 pickle/unpickle boost::mersenne_twister 实例的代码

typedef boost::mt19937 rng_t;

struct mt_pickle_suite : bp::pickle_suite {

  static bp::object getstate (const rng_t& rng) {
    std::ostringstream os;
    boost::archive::binary_oarchive oa(os);
    oa << rng;
    return bp::str (os.str());
  }

static void
  setstate(rng_t& rng, bp::object entries) {
    bp::str s = bp::extract<bp::str> (entries)();
    std::string st = bp::extract<std::string> (s)();
    std::istringstream is (st);

    boost::archive::binary_iarchive ia (is);
    ia >> rng;
  }
};
Run Code Online (Sandbox Code Playgroud)