Outils pour utilisateurs

Outils du site


lib:swig

Site web Github

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