Boost.Serialization и Boost.Python двухсторонняя рассол

голоса
4

У меня есть библиотека C ++, которая использует Boost.Serialization. Я создаю привязок Python для этой библиотеки с использованием Boost.Python. Это довольно ясно, как сделать маринад набор для Boost.Python, который использует Boost.Serialization (сохранить в строку, используя Boost.Serialization, и возвращает эту строку в Python).

То , что я хочу , это наоборот: учитывая boost::python::object, я хочу иметь serialize(...)функцию , которая будет вызывать Питон pickle.dumps()функцию и упорядочивание полученной строки. (Представьте себе std::vector<boost::python::object>. Как сериализовать этот вектор, Boost.Serialization бы вызвать вспомогательную serialize()функцию.) Возможно ли это? А еще лучше, можно использовать cPickleи обводной давая управление интерпретатору Python?

Задан 02/09/2011 в 21:43
пользователем
На других языках...                            


1 ответов

голоса
0

Вот код, который я использую для консервирования / unpickle например подталкивания :: 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;
  }
};
Ответил 06/09/2011 в 11:33
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more