无法将类型'myFuncDef *'指定为'void(*)(double *,double *)'

时间:2017-09-22 10:32:04

标签: python c function pointers cython

我正在努力在我的cython代码中使用指针的概念。以下示例是我尝试执行的简化版本。我有一个函数func,我想在函数(分布函数)中作为输入参数提供。该分布有两个指针向量作为输入变量。

from cpython cimport array
import cython
import ctypes
cimport numpy as np

ctypedef void (*myFuncDef)(double *, double *)
from cython.parallel import prange
cdef void func(int* x, double* hx, void(*func)(double*, double*), int n):
      def int i
      for i from 0 <= i < n:
          func[0](&x[i], &hx[i])
      return

cpdef void Lognormal(double* u, 
                  double* yu):
      #evaluate log of normal distribution
      yu=-u*u*0.5
      return

def foo(np.ndarray[ndim=1, dtype=np.float64_t] x,
        np.ndarray[ndim=1, dtype=np.float64_t] hx,
        myFuncDef distribution, int k):
    cdef np.ndarray[ndim=1, dtype=np.float64_t] sp
    cdef int num=len(x)
    cdef int j
    for j from 0 <= j <k:
        func(&x[0],&hx[0],&distribution, num)
        sp[j]=hx[0]
    return sp

所以我想使用Lognormal函数作为foo函数的输入。我收到以下错误消息:

Cannot assign type 'myFuncDef *' to 'void (*)(double *, double *)'

如果有任何建议可以修复此错误,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

你有一个太多的指针层(提出标准问题反对typedef s指针)。只需从&删除&distribution;它已经是你想要的功能指针了。