gpt4 book ai didi

c++ - Boost.Serialization 和 Boost.Python 双向 pickle

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:00 28 4
gpt4 key购买 nike

我有一个使用 Boost.Serialization 的 C++ 库。我正在使用 Boost.Python 为这个库创建 Python 绑定(bind)。很清楚如何为使用 Boost.Serialization 的 Boost.Python 制作一个 pickle 套件(使用 Boost.Serialization 保存到一个字符串,然后将该字符串返回给 Python)。

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

最佳答案

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

关于c++ - Boost.Serialization 和 Boost.Python 双向 pickle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7289897/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com