我正在使用用C ++编写的库,并且通过SWIG暴露给Python。 其中一个功能如下所示:
int addPoints(std::vector<Point> positions)
其中Point
是用C ++定义的结构,它的构造函数采用3个浮点数组成的数组。
这很慢,因为我有大约一百万点,在Python中我需要这样称呼
addPoints([MyLib.Point(p) for p in my_points])
所有与MyLib.Point.__init__
的通话都需要花费很多时间。
有没有办法告诉SWIG接受Python元组列表/浮点列表作为函数参数(即按原样my_points
),而不是要求我在Python中调用构造函数一百万次?
很抱歉,这似乎是一个以前曾被问过并回答过的问题,但我找不到。我怀疑它涉及类型映射,但是SWIG documentation on typemaps阻止了我(作为初学者)尝试自己解决该问题:
“类型图”是一种高级自定义功能,可直接提供 访问SWIG的低级代码生成器。不仅如此,它们是 SWIG C ++类型系统的组成部分(其重要内容 拥有)。