template <typname T>
class Fc2Par
{
public:
Fc2Par(std::string const& par_file)
~Fc2Par()
std::vector<Box<T>> convert_boxes(std::vector<Box<T>> const& boxes) const;
std::vector<Point<T>> convert_points(std::vector<Point<T>> const& points) const;
private:
PartitionMap<T> par_map;
PartitionRTree<T> par_idx;
};
事实上,T是双倍的。Box/Point是额外的模板类,但我不确定是否要在python中公开它。我有以下几点,但我在某些方面遇到了困难。我想我可以用熔合式T?在
^{pr2}$理想情况下,我希望在python中使用API,如下所示:
boxes_int = [(0,0,1,1), (0,0,2,2), ...]
boxes_float = [(0.0,0.0,1.0,1.0), (0.0,0.0,2.0,2.0), ...]
fc2par = PyFc2Par('foo.csv')
converted_int = fc2par.convert_boxes(boxes_int)
converted_float = fc2par.convert_boxes(boxes_float)
它们返回一个元组列表,其中包含xmin、xmax、ymin、ymax。在
我的问题:
在这种情况下使用保险丝类型正确吗?
如果我有一个元组列表,如何在Cython代码中将它们转换成Box[T]/Point[T],而不在Python中公开这些类?一旦我得到结果,我就可以把它转换回元组列表并发送回去。i、 e.转换盒的实现应该是什么样子?
谢谢你的帮助。在
问题1-不幸的是你不能在那里使用融合类型。(参见前面关于这个主题的问题:c++ class in fused type;Cython: templates in python class wrappers)。您必须为每个不同的变体创建一个单独的包装器。e、 g.:
不幸的是,这涉及到许多不可避免的代码重复。在
问题2。if
^{pr2}$convert_points
的实现实质上涉及遍历Python列表,创建方框,然后遍历向量来创建Python列表。大致轮廓如下:请注意,您需要告诉Cython关于
Box
(cdef extern from ...
),即使您随后没有将其公开给Python。在相关问题 更多 >
编程相关推荐