模板导出麻烦

时间:2011-04-20 20:07:43

标签: c++ python boost boost-python

我无法理解使用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导致导出错误。怎么了?

1 个答案:

答案 0 :(得分:1)

特别是在不了解Boost.Python的情况下,在我看来,您导出了CL_Rectf,而不是CL_Rectx<float>。因此,当被要求将python对象转换为CL_Rectx<float>时,Boost.Python不知道如何,并引发您看到的异常。

我的建议是忘记CL_Floatf并导出CL_Rectx<float>课程。 CL_Rectf作为C ++类在很多层面上都是个坏主意;你应该尽量避免在C ++中使用它。