Typemaps真的痛饮处理所有类型的方式,但如果你不想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
typemap,声明所有将来的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
嗨,马克, 根据你的建议我使用typemaps。但即使在类型映射我无法实现以下场景...... int f_name(int * k) 在C中,在该函数中正常填充并将返回一些值......但在这里甚至使用类型映射我无法做到这一点,它将填充值作为列表返回(例如:[,]),而不是填充值k。 –
Python不能修改整数,因为它是不可变的。这就是为什么它将输出参数作为元组返回。称之为:'ret,k = f_name(k)'。 –