SWIG:没有定义类型映射

2024-10-01 15:46:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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接口文件

^{pr2}$

问题是对于数组输入,SWIG抱怨没有类型映射。我不明白为什么。numpy.i文件取自here,我使用的类型映射描述为here

任何帮助都将不胜感激。在


Tags: 文件函数类型datahere头文件数组private
2条回答

这对我有用:

void get_position(double outarray[3])

使用

^{pr2}$

(注[任何]和[3])

导致

a.get_position()
Out[2]: array([0., 0., 0.])

问题是numpy中的typemap。我定义了一个两个参数的typemap,而您试图将它应用于单个参数。如果函数中有参数int len1和double*vec1,则可以这样做:

%apply (int DIM1, double* IN_ARRAY1) {(int len, double* H_)}

不要编写自己的类型映射,只需使用carrays.i。在

如果您要编写一个typemap,例如,将一个double元组作为输入,它看起来像:

^{pr2}$

在这种情况下,您可以按照预期的方式将其应用到函数中。在

%apply double TUPLE[3] {double H_[3]}

当试图弄清楚为什么不能使用typemap时,一个好的开始就是使用-tmsearch选项运行SWIG。它会告诉你在试图匹配函数参数时它在寻找什么。在

相关问题 更多 >

    热门问题