Я знаю, что часто есть много способов решить определенные проблемы. Но здесь я знаю, каким образом мне это нужно, но я не могу заставить его работать с Python и SWIG ...
У меня есть C-функция, которая возвращает мне массив двойных значений:
double *my(int x)
{
double a,b,*buf;
buf = malloc (x * sizeof(double));
a=3.14;
b=2.7;
buf[0]=a;
buf[1]=b;
return buf;
}
Здесь я определенно хочу иметь массив в качестве возвращаемого значения. Нет, как во многих примерах функция 'void', которая записывает во входной массив. Теперь я хотел бы получить оболочку SWIG-python, которую можно использовать как:
>>> import example
>>> print example.my(7)
[3.14,2.7]
Что бы я ни делал, у меня здесь есть некоторые концептуальные проблемы - я всегда получаю ст.ст. как <Swig Object of type 'double *' at 0xFABCABA12>
Я попытался определить некоторые карты типов в моем SWG-файле:
%typemap(out) double [ANY] {
int i;
$result = PyList_New($1_dim0);
for (i = 0; i < $1_dim0; i++) {
PyObject *o = PyFloat_FromDouble((double) $1[i]);
PyList_SetItem($result,i,o);
}
}
Но я все еще не могу получить свои результаты по мере необходимости. У кого-нибудь есть простой пример кода для решения этой задачи?