std::vector de boost::python::liste
J'ai une méthode en c++, qui est appelée à partir de python et doit renvoyer une liste python objet.
J'ai déjà créé la méthode, et son attachée à un exposé de classe et appelable à partir de python en ce moment... (il retourne void).
La question est donc, comment puis-je créer une liste python de:
std::vector<std::string> results;
Je ne suis pas vraiment à comprendre comment le constructeur travaille à partir de cette documentation:
http://www.boost.org/doc/libs/1_37_0/libs/python/doc/v2/list.html
Aussi... je n'ai pas vraiment envie de retourner sorte de enveloppés vecteur... je veux juste créer une nouvelle liste python avec la chaîne de valeurs du vecteur.
Toutes mes excuses si c'est un doublon... j'ai trouvé tout à fait un peu liste de vecteur de questions, mais je ne pouvais pas trouver tout sur la création d'une nouvelle liste python.
J'ai pu développer cette question afin d'inclure d'autres questions comme:
La création d'une nouvelle python dictionnaire à partir d'un: std::map<std::string, std::string>
et ainsi de suite.
- J'ai vu cette question: stackoverflow.com/questions/3240971/... Mais qui a parlé de retour d'un enveloppé vecteur... je veux juste créer un nouvel objet python et de retour que.
- Double Possible: stackoverflow.com/q/5314319/198633
Vous devez vous connecter pour publier un commentaire.
J'ai cette fonction à l'aide des itérateurs pour convertir
std::vector
àpy::list
:py::object iter = get_iter(v)
:No to_python (by-value) converter found for C++ type: class std::vector<int,class std::allocator<int> >
que de Stimuler 1.51No to_python (by-value) converter found for C++ type: std::vector<int, std::allocator<int> >
boost::python
déjà inclut des fonctionnalités pour l'emballage des vecteurs et des cartes. Voici un exemple de code pour les vecteurs, comme vous pouvez le voir à la fois de passage et le retour des listes est assez simple:Les cartes sont très similaires pour les vecteurs et sont décrites dans ce post:
Boost::Python - il est possible de convertir automatiquement dict --> std::map?
Malheureusement
boost::python
ne comprennent actuellement pas d'installations pour l'emballage des listes. Vous pouvez créer le wrapper manuellement, mais je suis hors du temps pour répondre à cette question. Je peux le poster aujourd'hui ou demain. J'apprécierais une nouvelle question sur ce problème particulier, parce que la réponse sera assez vaste et est probablement à l'extérieur de la portée de ce post. Je voudrais simplement eviter les listes et utiliser des vecteurs à la place.vector_indexing_suite
.vector_indexing_suite
n'est de créer un wrapper python pourstd::vector
. Cela signifie que lestd::vector
est accessible directement. En gros, c'est le plus bas frais généraux que vous pouvez espérer. Voici le lien: boost.org/doc/libs/1_68_0/libs/python/doc/html/reference/topics/....Si vous souhaitez uniquement créer python liste manuellement (et le retour de la fonction py::liste plutôt que de vecteur), faites comme ceci:
Pour les conversions automatiques, de définir le convertisseur vecteur de liste python de c++ et de c++ python liste -- j'ai juste écrit à ce sujet à L'instanciation de shared_ptr est dans boost::python (la deuxième partie de la réponse); de cette façon, vous obtenez vraiment python listes.
Une autre possibilité pour la conversion automatique (que je n'ai aucune expérience avec) est d'utiliser indexing_suite, qui se terminera
vector<string>
comme une classe spéciale, en python, en tant que collègue a mentionné ici déjà.De http://gist.github.com/octavifs/5362272:
FWIW, ici, est basé sur un modèle de fonction dans la même veine que eudoxos solution:
get_list(0) == get_list(0)
retourne vrai? Quelque chose commebp::reference_existing_object
mais à l'intérieur de la fonction?- Je utiliser les fonctions utilitaires pour convertir à partir de/vers des conteneurs stl. Triviaux de la fonction somme illustre la façon dont ils sont utilisés. J'ai aussi trouvé suivantes opensource paquet qui a fait quelques utilitaires de conversion: https://github.com/cctbx/cctbx_project/tree/master/scitbx/boost_python