我有一个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();
};
Run Code Online (Sandbox Code Playgroud)
这是swig接口文件,
%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>
Run Code Online (Sandbox Code Playgroud)
问题是对于数组输入,SWIG抱怨没有类型映射.我不明白为什么.numpy.i文件是从这里获取的,我在这里使用的是我使用的类型映射
任何帮助,将不胜感激.
问题是 numpy.i 中的类型映射定义了两个参数类型映射,并且您试图将其应用于单个参数。如果函数中有参数 int len1 和 double* vec1 ,那么这将起作用:
%apply (int DIM1, double* IN_ARRAY1) {(int len, double* H_)}
Run Code Online (Sandbox Code Playgroud)
无需编写自己的类型映射,只需使用carrays.i即可。
如果您要编写一个类型映射,例如将双精度元组作为输入,它看起来像:
%typemap(in) double TUPLE[ANY]
{
...
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以按照您期望的方式将其应用到您的函数中。
%apply double TUPLE[3] {double H_[3]}
Run Code Online (Sandbox Code Playgroud)
当试图弄清楚为什么不能使用类型映射时,一个好的起点是使用该-tmsearch选项运行 SWIG。它会告诉您在尝试匹配函数参数时正在寻找什么。
| 归档时间: |
|
| 查看次数: |
2266 次 |
| 最近记录: |