使用SWIG和Python按引用传递布尔值
我用SWIG把一个C++库的接口封装了一下,效果不错,但我遇到了一个“bool &”参数的问题。
原始的接口是这样的:
void foo(bool & bar);
当我从Python调用它时,_wrap.cxx在处理过程中卡住了,停在了
int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_bool, 0);
_v = SWIG_CheckState(res);
if (_v) {
换句话说,swig无法把我传入的内容转换成一个bool指针。
我想这样从Python调用它:
obj = LibObject()
x = 0
obj.foo(x)
有没有简单的类型映射解决办法呢?
1 个回答
3
这个应该可以用:
%include <typemaps.i>
%apply bool & INOUT { bool & bar };
每当SWIG看到一个 bool & bar
这样的参数时,它会把这个参数当作输入输出参数来处理。如果你只需要它作为输出参数,可以使用 OUTPUT
。