我试图包装一个C++库,其中逻辑在{{CD1>}文件中实现为模板化的函子,我正在努力寻找将C++函子作为Cython/Python函数公开的正确方法。像下面这样的函子应该如何包装在Cython中?在
我相信这应该是可能的,至少对于模板类和函数,根据Cython 0.20 docs。在
<强>注:我想我已经知道如何包装正常的C++函数,当我试图封装一个模板化的<强>函数子< /强>, >即EEM>一个模板^ {< CD2>},它超载了^ {CD3>}运算符(当数据类型固定时,它像一个函数一样)。在
#include <vector>
#include "EMD_DEFS.hpp"
#include "flow_utils.hpp"
template<typename NUM_T, FLOW_TYPE_T FLOW_TYPE= NO_FLOW>
struct emd_hat_gd_metric {
NUM_T operator()(const std::vector<NUM_T>& P, const std::vector<NUM_T>& Q,
const std::vector< std::vector<NUM_T> >& C,
NUM_T extra_mass_penalty= -1,
std::vector< std::vector<NUM_T> >* F= NULL);
};
当我试图用cython --cplus wrapper.pyx
编译它时,上面给出了一个Calling non-function type 'emd_hat_gd_metric[NUM_T]'
错误。在
Here's the full library I'm trying to wrap.
最终目标:能够将emd_hat_gd_metric
作为Cython/Python函数调用,参数是NumPy数组。在
如果需要许多不同的数据类型,这有点笨拙,但我只需要
double
。如果不需要修改外部库也会更好……但是它可以工作。在< C++ > {< CD3> }文件:
用所需的数据类型实例化函子(例如,
double
):在Cython
.pyx
文件中:{no>正常情况下需要声明cd6}:
^{pr2}$然后可以从Cython中调用
some_template_functor_double
。在相关问题 更多 >
编程相关推荐