我有一个 C++ 类,我正尝试使用 SWIG 为 Python 包装它。我在尝试包装以数组作为输入的函数之一时遇到问题。
这是头文件,
class dyndiff_data_t
{
private:
double H[3];
double GAMMA;
double k;
double P;
public:
dyndiff_data_t(double H_[3],
const double GAMMA_,
const double k_,
const double P_);
void test();
};
这是 swig 接口(interface)文件,
%module twowave
%{
#define SWIG_FILE_WITH_INIT
#include <twowave.h>
%}
%include "numpy.i"
%init %{
import_array();
%}
%apply (double IN_ARRAY1[3]) {(double H_[3])};
%include <twowave.h>
问题是对于数组输入,SWIG 提示没有类型映射。我不明白为什么。 numpy.i 文件取自 here我正在使用的类型图描述为 here
如有任何帮助,我们将不胜感激。
最佳答案
问题在于 numpy.i 中的类型映射定义了一个双参数类型映射,而您正试图将其应用于单个参数。如果您的函数中有参数 int len1 和 double* vec1,这将起作用:
%apply (int DIM1, double* IN_ARRAY1) {(int len, double* H_)}
与其编写自己的类型图,不如使用 carrays.i .
如果你要写一个类型映射,例如将 double 元组作为输入,它看起来像:
%typemap(in) double TUPLE[ANY]
{
...
}
在这种情况下,您可以按照您期望的方式将其应用于您的函数。
%apply double TUPLE[3] {double H_[3]}
在尝试弄清楚为什么不能使用类型映射时,一个很好的起点是使用 -tmsearch
选项运行 SWIG。在尝试匹配您的函数参数时,它会告诉您它在寻找什么。
关于python - SWIG:未定义类型映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14763882/