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)'。 –