Я использую следующий код
1) Файл: example.i
%module example
%{
/* Put header files here or function declarations like below */
#include "example.h"%}
%include "example.h"
2) Файл example.h
enum Type {one,two};
class myClass {
public:
myClass() {}
static bool printVal(int val);
static bool printEnum(Type val);
};
3) Файл 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;
}
Шаги для компиляции и запуска
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'
Я получаю TypeError, если я передаю enum. Я знаю, что есть карта типов для преобразования типов, но я не знаю, как использовать карты типов для передачи значений перечисления из сценария TCL в класс c ++. Я с нетерпением жду справки о том, как передать значения перечисления из TCL в объекты класса c ++ с помощью SWIG.
Согласно официальная документация:
Константы C / C ++ устанавливаются как глобальные переменные Tcl, содержащие
соответствующее значение.
Таким образом, вы должны обратиться к значению enum путем разыменования соответствующей переменной:
% myClass_printEnum $one
Некоторые примеры использования перечислений C / C ++ в Tcl доступны по адресу http://doc.gnu-darwin.org/enum/
Других решений пока нет …