lib:swig
Table des matières
Utilisation de base
- libmod.i
// Nom de la librairie de sortie %module mod %{ // Inclure tous les entêtes à convertir #include "file1.h" #include "file2.h" #include "file3.h" } // Inclure tous les entêtes à convertir en commençant par un % %include "file1.h" %include "file2.h" %include "file3.h"
template
Pour les template
, il faut les définir manuellement entre le %include
qui le défini et le %include
qui l'utilise. Il y a donc un problème si le template
est défini et utilisé dans le même entête.
- libmod.i
%module mod %{ #include "file1.h" #include "file2.h" } // file1.h contient une classe file1_classe<T> %include "file1.h" %template(file1_classe_int) file1_classe<int>; // file2.h utilise une implémentation de file1_classe<int>. %include "file2.h"
Can't wrap 'xxx' unless renamed to a valid identifier.
C'est le cas des opérateurs operator !=
. Ajouter en début de fichier après le %module …
%rename(operator_not_equal) operator!=;
Multiple inheritance is not supported in
Ajouter après %module
:
%include <swiginterface.i>
Soit la ClasseA
class ClassA : public Number, public Base<int> {}
Ajouter:
%interface_impl(Number); %include "number.h" %interface_impl(Base); %include "base.h" %rename(base_int_ren) Base<int>; %template(base_int) Base<int>;
Je n'ai pas testé mais je conseille de mettre un nom différent lors du rename
et du template
.
Si Number
possède un parent, ce parent doit aussi être déclaré en interface.
Par contre, il y a un soucis si une classe avec template doit être déclarée en interface :
%interface_impl(InterfaceVisitable); // Nécessaire car swiginterface.i fait NomDeLaClasseAvecTemplateImplSwigImpl. // InterfaceVisitable<Number>SwigImpl est logiquement invalide sans rename %rename(interface_visitable_number_ren) InterfaceVisitable<Number>; // Mais lors de la déclaration du %template, c'est l'échec. %template(interface_visitable_number) InterfaceVisitable<Number>
J'ai le résultat :
Error: The interface feature name 'interface_visitable_number_ren' for proxy class 'interface_visitable_number_ren' is already defined in the generated target language module in scope ''.
lib/swig.txt · Dernière modification : 2022/09/13 10:04 de root