Boost.序列化以及Boost.Python双向pi

2024-04-20 02:15:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个C++库,它使用Boost.序列化. 我正在使用为这个库创建Python绑定Boost.Python. 很清楚如何为Boost.Python使用Boost.序列化(使用Boost.序列化,并将该字符串返回给Python)。在

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


Tags: 函数字符串序列化object向量serializepicklestd
1条回答
网友
1楼 · 发布于 2024-04-20 02:15:36

下面是我用来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;
  }
};

相关问题 更多 >