Как передать значения перечисления из сценария TCL в класс C ++, используя Swig

Я использую следующий код

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.

0

Решение

Согласно официальная документация:

Константы C / C ++ устанавливаются как глобальные переменные Tcl, содержащие
соответствующее значение.

Таким образом, вы должны обратиться к значению enum путем разыменования соответствующей переменной:

% myClass_printEnum $one

Некоторые примеры использования перечислений C / C ++ в Tcl доступны по адресу http://doc.gnu-darwin.org/enum/

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]