Je voudrais exporter beaucoup strong> 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? P>
3 Réponses :
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 p>
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.
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: P>
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!)
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é. P>
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.