从cython调用c ++模板函数

时间:2018-08-10 20:30:08

标签: python c++ cython

当前,我正在学习如何从Cython调用c ++模板函数。我有一个名为'cos_doubles.h'的.h文件,该文件如下:

#ifndef _COS_DOUBLES_H
#define _COS_DOUBLES_H
#include <math.h>

template <typename T, int ACCURACY>
void cos_doubles(T * in_array, T * out_array, int size)
{
    int i;
    for(i=0;i<size;i++){
        out_array[i] = in_array[i] * 2;
    }
}

#endif

实际上,变量ACCURACY不起作用。现在,我想在cython中定义一个模板函数,该模板函数使用此cos_doubles函数,但仅以typename T作为模板。换句话说,我想在我的cython代码中给变量ACCURACY一个值。我的.pyx代码类似于以下

# import both numpy and the Cython declarations for numpy
import numpy as np
cimport numpy as np
cimport cython

# if you want to use the Numpy-C-API from Cython
# (not strictly necessary for this example)
np.import_array()

# cdefine the signature of our c function
cdef extern from "cos_doubles.h":
     void cos_doubles[T](T* in_array, T* out_array, int size)

我知道这段代码有错误,因为我没有在ACCURACY中定义void cos_doubles[T](T* in_array, T* out_array, int size)的变量。但是我不知道如何设置语法。例如,我要放ACCURACY = 4。谁能告诉我该怎么做?

我已经拥有的一种解决方案是

cdef void cos_doubles1 "cos_doubles<double, 4>"(double * in_array, double * out_array, int size)
cdef void cos_doubles2 "cos_doubles<int, 4>"(int * in_array, int * out_array, int size)

但是我没有定义两个不同的函数。有更好的解决方案吗?

0 个答案:

没有答案