-
Wrapper C++ avec SWIG
Bonjour,
Je cherche à faire un wrapper avec le logiciel SWIG, j'explique un peu :
j'ai du code en C++ qui dépend d'une librairie et j'aimerais faire un wrapper autour de mon code de façon à séparer ce qui dépend de la librairie et ce qui n'en dépend pas. J'ai commencé manuellement à encapsuler mes classes et fonctions dans un wrapper OK pour le principe, le problème c'est que j'ai énormément de fonction, d'opérateurs, de macros etc ... (tous dépendent de la fameuse librairie) ... bref c'est un travail de fourmis j'y arriverai jamais ! :(
Donc je voudrais utiliser SWIG qui encapsule de façon automatique des fonction, le problème est que dans les documents SWIG que j'ai lus je ne vois pas le C++ comme langage de sortie (target language) ...
Et cela me surprend beaucoup ! 8O
Quelqu'un pourrait-il m'éclairer là-dessus ... Comment utilise SWIG avec comme langage source le C++ et comme langage de sortie le C++ aussi !
Merci beaucoup.
Bonne journée.
-
Quand je te lis, j'ai l'impression que tu es totalement sur la mauvaise voie.
SWIG permet de générer du C++ pour s'interconnecter avec d'autres langages (Python, Java...). On parle de wrapper du code pour un autre langage.
Mais on parle aussi de wrapper en tant que design pattern. Dans ce cas, un wrapper permet d'adapter une classe à une autre attendue par le client.
J'ai l'impression que tu te situes dans le second cas et SWIG ne te sera d'aucune utilité.
Si tu n'arrives pas à isoler l'utilisation de la librairie et que tout ton code repose dessus, il n'y aura pas de miracle. Tu seras fortement lié à cette librairie et tu ne pourras pas y échapper.
-
Oui en effet je souhaite un petit peu détourner Swig pour mon usage.
j'ai besoin d'encapsuler toutes les classes et fonctions de ma librairie donc de me faire un wrapper autour de cette librairie ... mais tout en restant en c++, pas d'interfaçage avec un autre langage ... Et en lisant la doc Swig j'ai l'impression que ça n'est pas possible.
Sauf que mon chef me parle d'une extension Swig qui permettrait de réaliser cela et j'ai beau chercher, je ne trouve rien :?
-
Pas de swig pour générer du C++ (à la limite du C mais je crois que ce n'est encore que dans les cartons). Ça n'a aucun sens.
Soit tu fais une façade pour ne proposer que les services de la librairie qui t'intéressent. Soit tu isoles la partie de code qui utilise la librairie. Soit tu acceptes d'être totalement dépendant de cette librairie. Mais pas de swig pour générer du C++ à partir de C++.
-
Ok pas de C++ à partir de C++ dans Swig, merci c'est ce que je voulais savoir :ccool:
Sinon si si ça a du sens mais j'arrive peut-être pas à l'expliquer convenablement, en tout cas dans mon code il y a déjà des wrapper autour de plusieurs librairies (c'est pas moi qui les ai faits :?)
En fait un peu partout dans mon code il y a des appels de fonctions de cette fameuse librairie et donc toutes les parties du code qui appellent ces fonctions sont dépendantes directement de cette librairie, ce que je dois faire c'est encapsuler toutes ces fonctions, les réunir dans un wrapper, ensuite tous les appels de fonctions appelleront la fonction correspondante du wrapper (et non de la librairie), ainsi le code dépendra uniquement du wrapper mais SEUL le wrapper dépendra directement de la librairie. Voilà c'est peut-être plus clair.
Bon du coup faut que je me tape le travail d'encapsulation manuellement, bah j'en ai pour 3 mois là :cry:
Merci, bonne journée.