J'utilise le code suivantcomment passer des valeurs ENUM à partir du script TCL à la classe C++ en utilisant SWIG
1) Fichier: example.i
%module example
%{
/* Put header files here or function declarations like below */
#include "example.h"
%}
%include "example.h"
2) Fichier example.h
enum Type {one,two};
class myClass {
public:
myClass() {}
static bool printVal(int val);
static bool printEnum(Type val);
};
3) fichier example.cpp
#include "example.h"
#include <iostream>
using namespace std;
bool myClass::printVal(int val) {
cout << " Int Val = " << val << endl;
return 0;
}
bool myClass::printEnum(type val) {
cout << " Enum Val = " << val << endl;
return 0;
}
étapes pour compiler et exécuter
swig -c++ -tcl example.i
g++ -c -fpic example_wrap.cxx example.cpp -I/usr/local/include
g++ -shared example.o example_wrap.o -o example.so
setenv LD_LIBRARY_PATH /pathtoexample.so:$LD_LIBRARY_PATH
tclsh
% load example.so
%myClass_printVal 1
Int Val = 1
%myClass_printEnum one
TypeError in method 'myClass_printEnum', argument 1 of type 'type'
Je reçois TypeError si je passe enum. Je sais qu'il existe une typemap pour la conversion de type, mais je ne sais pas comment utiliser typemaps pour passer des valeurs enum du script TCL à la classe C++. J'attends de l'aide pour savoir comment transmettre des valeurs enum de TCL à des objets de classe C++ en utilisant SWIG.
J'ai essayé la même chose et ça ne marche pas . J'ai essayé de mettre un "un"; myClass_printEnum $ un. Je reçois la même erreur TypeError dans la méthode 'myClass_printEnum', l'argument 1 de type 'type' – TechEnthusiast
La variable globale 'one' est déjà définie par' example.so'. Ne le mets pas toi-même. – Leon
est-il possible de définir enum Type dans la classe myClass et le passer de TCL par exemple class myClass { public: – TechEnthusiast