使用SWIG和Python按引用传递布尔值

0 投票
1 回答
1974 浏览
提问于 2025-04-16 08:13

我用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

撰写回答