我正在学习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列表(对象),请告诉我。谢谢!
答案 0 :(得分:0)
试试这个:
from libcpp.vector cimport vector
from libcpp cimport bool as cpp_bool
cdef extern from ...:
cdef void foo(vector[cpp_bool]& result, ...)