gpt4 book ai didi

python - SWIG:未定义类型映射

转载 作者:太空狗 更新时间:2023-10-30 01:23:18 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com