Outils pour utilisateurs

Outils du site


lib:swig

Ceci est une ancienne révision du document !


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>;

<note>Je n'ai pas testé mais je conseille de mettre un nom différent lors du rename et du template.</note>

Si Number possède un parent, ce parent doit aussi être déclaré en interface.

<note warning> 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 ''.

</note>

lib/swig.1526244998.txt.gz · Dernière modification : 2018/05/13 22:56 de root