SWIG нужны подсказки, где параметры не просто вводятся. Эти подсказки предоставляются типографскими картами. Вам нужно либо определить карты типов, либо использовать заранее определенные (см. typemaps.i ).
Вот пример:
%module test
%{
int foo(int& a, int& b, int& c)
{
int ret = a + b + c;
a = 10;
b = 20;
c = 30;
return ret;
}
%}
%include <typemaps.i>
int foo(int& INOUT, int& INOUT, int& INOUT);
С помощью карты типов INOUT
Python может передавать целые числа в функцию с for for int*
или int&
, и возвращаемое значение будет кортежом исходного возвращаемого значения и любых выходных аргументов. Компиляция приведенного выше результата SWIG и использование в Python выглядит следующим образом:
>>> import test
>>> test.foo(1,2,3)
[6, 10, 20, 30]
Вы можете обновить переменные с помощью следующего кода:
>>> a,b,c = 1,2,3
>>> r,a,b,c = test.foo(a,b,c)
>>> r
6
>>> a,b,c
(10, 20, 30)
Обратите внимание, что вы также можете %apply
существующих сопоставлений типов с типами, поэтому при использовании %include "libraryHeader.h"
вместо прямого объявления функций вы можете использовать следующее для общего применения INOUT
сопоставления типов ко всем int&
параметрам:
%apply int &INOUT { int& };
%include "libraryHeader.h"