我有一个程序,其中的 C 函数有点像下面的代码。当我尝试通过 python 调用这个函数时,它会抛出错误说
'int *' 类型的参数 2。在 swig 中,我看到有办法通过类型映射来处理这个问题,是否还有其他类型映射。因为有一堆函数有很多参数,它们都有 int * 。
#include<stdio.h>
int check(int k, int *i) {
if( k%2 == 0)
*i = 1;
else
*i = 0;
}
类型图确实是 SWIG 处理所有类型的方式,但如果您不typemaps.i
特别想要,那么如何:
%module x
%include <cpointer.i>
%pointer_functions(int,int)
%inline %{
void check(int k, int *i) {
if (k % 2 == 0)
*i = 1;
else
*i = 0;
}
%}
cpointer.i
允许您创建指向类型的简单指针。这是一个使用示例:
>>> import x
>>> i=x.new_int()
>>> x.check(6,i)
>>> x.int_value(i)
1
>>> x.delete_int(i)
但实际上,它使用起来更简单typemaps.i
。下面%apply
应用预定义的OUTPUT
类型映射,声明所有未来int *
参数都是输出参数。Python 不需要调用参数,而是将参数作为输出返回。如有必要,使用元组返回正常返回值和所有输出参数。
%module x
%include <typemaps.i>
%apply int *OUTPUT { int * };
%inline %{
void check(int k, int *i) {
if (k % 2 == 0)
*i = 1;
else
*i = 0;
}
%}
使用示例:
>>> import x
>>> x.check(5)
0
>>> x.check(6)
1