当前,我正在学习如何从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)
但是我没有定义两个不同的函数。有更好的解决方案吗?