J'ai une bibliothèque C++ qui utilise Boost.Serialization. Je crée des liaisons Python pour cette bibliothèque en utilisant Boost.Python. Il est assez clair comment faire une suite pickle pour Boost.Python qui utilise Boost.Serialization (enregistrer dans une chaîne en utilisant Boost.Serialization, et retourner cette chaîne à Python).Boost.Serialization et Boost.Python pickle bidirectionnel
Ce que je veux est l'inverse: étant donné un boost::python::object
, je veux avoir une fonction serialize(...)
qui appeler la fonction pickle.dumps()
Python et sérialiser la chaîne résultante. (Imaginez un std::vector<boost::python::object>
. Comme je sérialiser ce vecteur, Boost.Serialization appellerait la fonction auxiliaire serialize()
). Est-ce possible? Mieux encore, est-il possible d'utiliser cPickle
et de contourner donnant le contrôle à l'interpréteur Python?
Avez-vous trouvé une solution? J'ai le même problème maintenant. Je pense que la définition d'un espace de nommage boost {namespace sérialisation {template void sérialiser (Archive & a, boost :: python :: objet & obj, const version non signée) {/*...*/; }}} 'devrait faire l'affaire, mais avant d'essayer ... Merci! –
eudoxos
Pour moi, le plus gros problème était de savoir comment utiliser le module pickle lui-même. Vous pouvez l'importer en utilisant boost :: python :: import. J'ai finalement opté pour une solution différente à mon problème spécifique qui n'a pas impliqué cette question. La configuration de la fonction boost :: serialization :: serialize() devrait fonctionner exactement comme vous le décrivez. – foxcub