我如何包装(或子类)一个Cython类型的内存视图,以便向C ++类公开新方法?

时间:2015-02-06 09:47:20

标签: python c++ oop numpy cython

我试图将Python接口写入一个相当大的模板化C ++类(具体来说,KDTreeSingleIndexAdaptor仅用于构建KD树的nanoflann标头库中的{{3}}类。 / p>

此类的一个模板参数是通用DatasetAdaptor类,我必须自己实现。 DatasetAdaptor必须公开以下界面:

 template <typename T>
 class GenericDatasetAdaptor
 {

 // ...

 public:

      // Must return the number of data points
      inline int kdtree_get_point_count() const { ... }

      // Returns the dim'th component of the idx'th point in the class
      inline T kdtree_get_pt(const int idx, int dim) const { ... }

      // Optional bounding-box computation: return false to default to a standard bbox computation loop.
      template <class BBOX>
      bool kdtree_get_bbox(BBOX& /* bb */) const { return false; }

 };

我希望能够将[npoints, ndim] Cython类型的内存视图作为KDTreeSingleIndexAdaptor的输入数据传递。如果我在纯Cython中实现DatasetAdaptor,它可能看起来像这样:

cdef class MemoryviewAdaptor:

    cdef double[:, :] data

    def __cinit__(self, data):
        self.data = data

    cdef inline int kdtree_get_point_count(self):
            return self.data.shape[0]

    cdef inline double kdtree_get_pt(self, const int idx, const int dim):
            return self.data[idx, dim]

    cdef inline bint kdtree_get_bbox(self):
            return False

如何设计类似于Cython类型的内存视图的接口,将这些方法暴露给C ++类?

0 个答案:

没有答案