我一直试图弄清楚如何通过使用SWIG到python的引用传递固定大小的数组。大多数情况下,我一直在考虑使用numpy.i接口。但是,我似乎无法在网上找到任何参考。
对于常规数组传递给numpy的方式,首先是foo.h
中的C ++函数:
void foo(double* array, int length);
SWIG文件的相关部分是:
%include "numpy.i"
%init %{
import_array();
%}
%apply (unsigned char* IN_ARRAY1, int DIM1) {(unsigned char* frame, int len)};
%include "foo.h"
问题是当C ++函数是:
时如何执行此操作void bar(double (&array)[3]);
答案 0 :(得分:1)
这是对3个双打数组的引用,对吗?根据{{3}},您应该可以按原样使用。
否则,您可以尝试34.3.9 Pointers, references, values, and arrays或之后的部分。或者提供有关您希望能够编写的Python代码与您必须编写的代码的更多详细信息,如果您只是让SWIG按原样导出bar()
函数,而不使用类型映射。
更新:你还应该能够%扩展或%内联转发到数组版本的适配器函数,如:
%inline %{
void bar(double* array, int length) {
typedef double triplet[3]; // array of 3 doubles
bar((triplet&)array); // shouldselect your bar since only one arg
}
%}
警告:未经测试;)