Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

C++ wrapper generators

3 réponses
Avatar
Franck Pommereau
Bonjour,

Je cherche =E0 binder un librairie C++ en Python. Quel outil me=20
conseillez-vous pour g=E9n=E9rer le code du binding avec un maximum de=20
simplicit=E9 ? Sachant que mes rudiments de C++ sont bien loins derri=E8r=
e=20
moi...

J'ai lu la comparaison sur=20
http://seal.web.cern.ch/seal/snapshot/work-packages/scripting/evaluation-=
report.html=20
qui semble pousser vers SWIG ou Boost.Python. Mais finalement, l'auteur=20
ne prend pas position...

Que choisir ?

Merci d'avance de vos conseils.
Franck

3 réponses

Avatar
olivier Ravard
Franck Pommereau wrote:
Bonjour,

Je cherche à binder un librairie C++ en Python. Quel outil me
conseillez-vous pour générer le code du binding avec un maximum de
simplicité ? Sachant que mes rudiments de C++ sont bien loins derrière
moi...

J'ai lu la comparaison sur
http://seal.web.cern.ch/seal/snapshot/work-packages/scripting/evaluation-report.html
qui semble pousser vers SWIG ou Boost.Python. Mais finalement, l'auteur
ne prend pas position...

Que choisir ?

Merci d'avance de vos conseils.
Franc
k
Ayant essayé les deux je suggère boost.python car plus puissant

avec la possibilité de wrapper des classes.
Peut-être vais-je être contredit mais c'est mon avis après de nombreux
essais avec l'un et l'autre. Ceci dit, une période d'apprentissage plus
longue est nécessaire avec boost.python bien que les fichiers à écrire
en C++ soient 10 fois moins long.

O.R.

Avatar
Cofr
Franck Pommereau wrote:

Bonjour,

Je cherche à binder un librairie C++ en Python. Quel outil me
conseillez-vous pour générer le code du binding avec un maximum de
simplicité ? Sachant que mes rudiments de C++ sont bien loins derrière
moi...

J'ai lu la comparaison sur

http://seal.web.cern.ch/seal/snapshot/work-packages/scripting/evaluation-report.html

qui semble pousser vers SWIG ou Boost.Python. Mais finalement, l'auteur
ne prend pas position...

Personnellement j'ai utilisé de très nombreuses fois SWIG, pour

les classes simples, il est très efficace et évite d'écrire
du code intermédiaire pour fabriquer une interface.
Si tu travailles avec un environnement de développement récent,
tu peux l'introduire dans ta chaine de compilation, et lorsque
que tu modifies un .h, il remettra à jour automatiquement ton
wrapper, sans que tu ais aucune ligne spécifique à écrire.
Ptite précision, pour une utilisation avec le C++, il faut
lancer SWIG avec l'option shadow, il génére alors en plus
une classe python, qui te permet d'utiliser tes classes
C++ comme de véritable classes Pythons.

Pour des classes qui contiennent des templates ou
des classes imbriquées, il a un peu du mal à générer (à revérifier
avec une version récente de SWIG),
dans ce cas il vaut mieux se tourner vers une autre solution.

Avatar
Franck Pommereau
Pour des classes qui contiennent des templates ou
des classes imbriquées, il a un peu du mal à générer (à revé rifier
avec une version récente de SWIG),
dans ce cas il vaut mieux se tourner vers une autre solution.


Merci pour ta réponse (et merci aussi à Olivier). Le code à binder n'est
pas le mien et je crois qu'il contient des choses assez sophistiquées,
notamment des classes imbriquées. Je vais donc aller voir du côté d e
Boost.Python.

Franck