SWIG Python 传递固定大小数组的引用
我一直在尝试弄明白如何通过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 个回答
1
这是指一个包含3个双精度浮点数的数组,对吧?根据34.3.9 指针、引用、值和数组的内容,你应该可以直接使用它。
如果不行,你可以试试34.9.4 将Python元组映射到小数组,或者后面的部分。或者在你的问题中提供更多细节,说明你希望编写什么样的Python代码,以及如果让SWIG直接导出bar()
函数而不使用类型映射,你需要写什么代码。
更新:你也可以尝试使用%extend或%inline来创建一个适配器函数,转发到数组版本,类似于:
%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
}
%}
警告:未测试哦;)