如何cCythonize一个C ++函数,它接受一个容器作为返回结果的输入

时间:2016-03-09 23:35:24

标签: python cython

我正在学习Cython以将C ++类暴露给Python。我成功地暴露了简单的C ++类而没有太多问题。但是,我有以下问题:

我有一个带有以下C ++签名的函数:

void foo(std::vector<bool>&result, std::vector<int> const& x, std::vector<int> const& y)

请注意,我无法更改功能签名,因为这是第三方库。

如何编写适当的Cython代码来导出它?问题是'result'容器被传递给foo()以返回结果。关于如何做到这一点的任何(小)例子都将非常受欢迎。感谢。

更新:

按照Czarek的解决方案,我让它以这种方式工作:

from libcpp.vector cimport vector
from libcpp cimport bool as cpp_bool

cdef extern from "Rectangle.h" namespace "shapes":  
    cdef cppclass Rectangle:
        ....
        void foo(vector[cpp_bool]& result, vector[int] x, vector[int] y)

cdef class PyRectangle:
    def foo(self, x, y):
        cdef vector[cpp_bool] tmp_result
        self.thisptr.foo(tmp_result, x, y)


        result = []
        for i in tmp_result:
          result.append(i)
        return result

如果有更好的方法将矢量转换为python列表(对象),请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

from libcpp.vector cimport vector
from libcpp cimport bool as cpp_bool

cdef extern from ...:
    cdef void foo(vector[cpp_bool]& result, ...)