Outils pour utilisateurs

Outils du site


lib:swig

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
lib:swig [2018/03/24 23:17] – Création rootlib:swig [2022/09/13 10:04] (Version actuelle) – Ajout des sites web root
Ligne 1: Ligne 1:
-Fichier ''.i'' de base.+[[https://www.swig.org/|Site web]] [[https://github.com/swig/swig|Github]]
  
 +====Utilisation de base====
 <file raw libmod.i> <file raw libmod.i>
 // Nom de la librairie de sortie // Nom de la librairie de sortie
Ligne 18: Ligne 19:
 </file> </file>
  
 +====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. 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.
  
Ligne 36: Ligne 38:
 %include "file2.h" %include "file2.h"
 </file> </file>
 +
 +====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
 +<code cpp>
 +class ClassA : public Number, public Base<int> {}
 +</code>
 +
 +Ajouter:
 +  %interface_impl(Number);
 +  %include "number.h"
 +  %interface_impl(Base);
 +  %include "base.h"
 +  %rename(base_int_ren) Base<int>;
 +  %template(base_int) Base<int>;
 +
 +<WRAP center round info 60%>
 +Je n'ai pas testé mais je conseille de mettre un nom différent lors du ''rename'' et du ''template''.
 +</WRAP>
 +
 +Si ''Number'' possède un parent, ce parent doit aussi être déclaré en interface.
 +
 +<WRAP center round alert 60%>
 +Par contre, il y a un soucis si une classe avec template doit être déclarée en interface :
 +<code raw>
 +%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>
 +</code>
 +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 ''.
 +</WRAP>
  
lib/swig.1521929846.txt.gz · Dernière modification : 2018/03/24 23:17 de root