0
votes

Exportez le paquet C ++ avec des classes abstraites et normales à Python

Je voudrais exporter beaucoup de classes abstraites et normales de C ++ à Python. C'est essentiellement un package complet codé en C ++ et voudrait qu'elle soit couru dans Python. Au lieu d'emballer individuellement chaque classe, y a-t-il un moyen de les envelopper facilement et de les faire travailler dans Python?


4 commentaires

Salut. Qu'entendez-vous par exportation. Voulez-vous créer un module Python (pyc) de C ++ ou souhaitez-vous écrire l'équivalent Python de votre classe abstraite C ++?


Salut @ Jean-Marcvolle J'aimerais exporter la classe pour pouvoir les utiliser à Python


Pouvez-vous clarifier votre question? S'il vous plaît voir Comment demander , Centre d'aide .


Merci@amc. Je viens de mettre à jour la question.


3 Réponses :


0
votes

Oui, il est possible que vous utilisiez par exemple Pybind11 pour envelopper votre code C ++. Mais vous devez créer une classe d'emballage autour de lui. Il y a un exemple de ce ici

Swig est un autre possibilité. Celui-ci utilise votre fichier d'en-tête C ++ existant. Voir ici et descendre à la section 6.6.3 pour forcer le constructeur de classe abstraite à être créé en utilisant la fonction% pour la personnalisation xxx


2 commentaires

Merci pour le commentaire. Savez-vous si je disais un package entier codé en C ++ avec de nombreuses classes et classes abstraites, s'il existe un moyen de "facilement" les envelopper à la fois au lieu de les envelopper individuellement?


@mikanim j'ai inclus Swig dans ma réponse. Vous pouvez simplement réutiliser votre fichier d'en-tête existant.



0
votes

Boost Python et pybind11 vous permet de" exporter "C ++ classes en tant qu'objet Python. Les deux proposent des approches similaires basées sur des modèles. La solution Pybind11 est dite plus facile à utiliser. Si vous utilisez Microsoft Toolchain, vous pouvez vous reporter à cette page pour voir comment concevoir / construire des fixations Python à l'aide de Pybind11:

https://docs.microsoft.com/en-us/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2019


2 commentaires

Merci pour le commentaire. Savez-vous si je disais un package entier codé en C ++ avec de nombreuses classes et classes abstraites, s'il existe un moyen de "facilement" les envelopper à la fois au lieu de les envelopper individuellement?


Je ne suis pas au courant d'un outil qui ferait automatiquement les liaisons pour vous, si votre code C ++ utilise des règles de codage assez fortes, vous pourrez peut-être script une bonne partie de l'emballage. Vous pouvez probablement créer vos propres modèles sur le dessus des pybind11 afin de minimiser la quantité de code que vous devez écrire manuellement pour chacune des classes C ++. Une autre approche consiste à analyser vos en-têtes et à générer le code d'emballage via un script (Regexp est votre ami!)



0
votes

Utilisation de CPPYY ( http://cppyy.org ) est une option et à peu près aussi automatique que possible: Il suffit de charger les en-têtes et les bibliothèques. S'il y a vraiment un grand nombre d'en-têtes, vous pouvez les précompiler. L'instanciation des modèles et du croisement est effectuée de manière dynamique, au moment de l'exécution, de sorte qu'il ne faut donc pas être préparé.


0 commentaires