如何在cython中处理C typedef?

时间:2018-03-19 01:07:43

标签: c cython typedef

我正在使用古巴图书馆,我希望在我的Cython文件中使用C代码。要从头文件cuba.h中使用我想要的方法,我写在我的Cython文件的顶部

cdef extern from "cuba.h":
    void Cuhre(const int ndim, const int ncomp, integrand_t integrand,
    const double epsrel, const double epsabs,
    const int flags, const int mineval, const int maxeval,
    const int key,
    int *nregions, int *neval, int *fail,
    double integral[], double error[], double prob[])

Cuhre是我唯一想要使用的方法,上面是它的签名。该程序能够找到cuba.h,但它引发了一个错误,表示它不能将integrand_t识别为类型。在cuba.h中,它定义了一个函数类型* integrand_t:

typedef double cubareal;
typedef int (*integrand_t)(const int *ndim, const cubareal x[], const int *ncomp, cubareal f[], void *userdata);

那么,我如何修复此错误并在我的Cython程序中使用古巴库?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在cython文件中定义你的typedef,如下所示

cdef extern from "cuba.h":
    ctypedef int (*integrand_t)(const int *ndim, const cubareal x[], const int *ncomp, cubareal f[], void *userdata)