我无法理解使用boost.python将某些函数导出到python的正确方法。
我已导出此课程CL_Rectf。它继承了CL_Rectx<float>
。
现在我要导出函数bounding_rect
:
# In CL_Rectf class exporting
.def("BoundingRect", &CL_Rectf::bounding_rect, PYPOLICY_REFERENCE_EXISTING)
它编译,但是当我在python中使用这段代码时:
mBox = CL_Rectf()
mBox.BoundingRect(CL_Rectf(x, y, x2, y2))
我有这样的错误:
Boost.Python.ArgumentError: Python argument types in
CL_Rectf.BoundingRect(CL_Rectf, CL_Rectf)
did not match C++ signature:
BoundingRect(CL_Rectf {lvalue}, CL_Rectx<float>)
由于c ++签名中的CL_Rectx
导致导出错误。怎么了?
答案 0 :(得分:1)
特别是在不了解Boost.Python的情况下,在我看来,您导出了CL_Rectf
,而不是CL_Rectx<float>
。因此,当被要求将python对象转换为CL_Rectx<float>
时,Boost.Python不知道如何,并引发您看到的异常。
我的建议是忘记CL_Floatf
并导出CL_Rectx<float>
课程。 CL_Rectf
作为C ++类在很多层面上都是个坏主意;你应该尽量避免在C ++中使用它。