我一直在尝试弄清楚如何使用 SWIG 将固定大小的数组通过引用传递给 python。大多数情况下,我一直在为此考虑 numpy.i 接口(interface)。但是,我似乎无法在网上找到对此的任何引用。
对于传递给 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]);
最佳答案
这是对 3 个 double 组的引用,对吗?根据34.3.9 Pointers, references, values, and arrays ,您应该可以按原样使用。
否则,您可以尝试 34.9.4 Mapping Python tuples into small arrays ,或之后的部分。或者在您的问题中提供更多详细信息,了解您希望能够编写哪些 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
}
%}
警告:未经测试;)
关于python - 通过引用传递的 SWIG Python 固定大小数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22498128/