我有一个像这样的函数定义:
void Foo(int szData,int Data[]);
我有一个像这样的 SWIG 类型图:
%typemap(in) (int szData,int Data[])
{
int i;
if (!PyTuple_Check($input))
{
PyErr_SetString(PyExc_TypeError,"Expecting a tuple for this parameter");
$1 = 0;
}
else
$1 = PyTuple_Size($input);
$2 = (int *) malloc(($1+1)*sizeof(int));
for (i =0; i < $1; i++)
{
PyObject *o = PyTuple_GetItem($input,i);
if (!PyInt_Check(o))
{
free ($2);
PyErr_SetString(PyExc_ValueError,"Expecting a tuple of integers");
return NULL;
}
$2[i] = PyInt_AsLong(o);
}
$2[i] = 0;
}
类型映射允许我像这样从 Python 调用 Foo(): Foo((1,2,3))
在我添加一个重载函数之前,这非常有效,例如: int Foo(double t);
一切都很好,但是现在当我从 Python 调用 Foo() 时,我得到:
NotImplementedError: Wrong number or type of arguments for overloaded function 'Foo'.
Possible C/C++ prototypes are:
Foo(int,int [])
Foo(double)
如果我删除 typemap(in) 那么它也可以正常工作。
欣赏是否有人有任何想法,因为我完全被难住了......