通过引用传递的SWIG Python固定大小数组

时间:2014-03-19 06:36:27

标签: python c++ numpy swig

我一直试图弄清楚如何通过使用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]);

1 个答案:

答案 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
    }
%}

警告:未经测试;)