如何使用 Swig 将枚举值从 TCL 脚本传递到 C++ class
how to pass enum values from TCL script to C++ class using 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'
如果我通过 enum ,我会收到 TypeError 。我知道有用于类型转换的类型映射,但我不知道如何使用类型映射将枚举值从 TCL 脚本传递到 C++ class。我期待有关如何使用 SWIG 将枚举值从 TCL 传递到 C++ class 对象的帮助。
C/C++ constants are installed as global Tcl variables containing the
appropriate value.
所以你必须通过取消引用相应的变量来引用枚举值:
% myClass_printEnum $one
中提供了一些在 Tcl 中公开 C/C++ 枚举的示例
我正在使用以下代码
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'
如果我通过 enum ,我会收到 TypeError 。我知道有用于类型转换的类型映射,但我不知道如何使用类型映射将枚举值从 TCL 脚本传递到 C++ class。我期待有关如何使用 SWIG 将枚举值从 TCL 传递到 C++ class 对象的帮助。
C/C++ constants are installed as global Tcl variables containing the appropriate value.
所以你必须通过取消引用相应的变量来引用枚举值:
% myClass_printEnum $one
中提供了一些在 Tcl 中公开 C/C++ 枚举的示例