2011-04-20 7 views
1

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でこのコードを使用する場合:

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>) 

mBox = CL_Rectf() 
mBox.BoundingRect(CL_Rectf(x, y, x2, y2)) 

私は、このようなエラーが発生していますCL_RectxのC++署名のため、エクスポートに問題があります。どうしましたか?

答えて

1

特にBoost.Pythonを知らないと、CL_Rectfをエクスポートしたようですが、CL_Rectx<float>はエクスポートされていないようです。したがって、PythonオブジェクトをCL_Rectx<float>に変換するように頼まれたとき、Boost.Pythonは方法を知らず、あなたが見る例外を発生させます。

私の助言は、CL_Floatfを忘れてCL_Rectx<float>クラスをエクスポートすることです。 CL_RectfはC++クラスとして非常に多くのレベルで悪い考えです。 C++でもその使用を避けるべきです。