将本地Python对象而不是自定义C ++类传递给SWIG函数参数

时间:2020-03-02 07:26:04

标签: python c++ optimization swig

我正在使用用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 ++类型系统的组成部分(其重要内容 拥有)。

0 个答案:

没有答案