2011-03-20 37 views
2

欲導出到Python模塊(用C++編寫,與Boost.Python的庫)這樣的函數:導出功能,它返回一個參考

Vec2<Type> &normalize() 
Type dot(const Vec2<Type> &vector) const 

這些模板類Vec2的成員。這裏是我的出口代碼:

bp::class_< Vec2<int> >("Vec2i", bp::init<int, int>()) 
    .def("Length", &Vec2<int>::length) 
    .def("Dot", &Vec2<int>::dot, bp::return_internal_reference<>()); 
    //.def("Normalize", &Vec2<int>::normalize); 

Length方法編譯成功,但DotNormalize回報同樣的錯誤(編譯時):

error: no matching function for call to ‘boost::python::class_<Vec2<int> >::def(const char [4], <unresolved overloaded function type>, boost::python::return_internal_reference<>)’ 

我做錯了什麼?


UPD

真正的類名稱爲:CL_Vec<Type>,這裏是docs

+0

由於這些顯然是成員函數,請顯示整個類的定義。 – 2011-03-20 14:47:21

+1

是否有額外的'dot'超負荷,您沒有向我們展示? – 2011-03-20 14:52:07

+0

@larsmans @ john-zwinck我已添加到帖子中。 – Ockonal 2011-03-20 14:54:38

回答

4

如果你看看vec2.h(或您鏈接到文檔),你會看到dotnormalize都超載,因爲也存在static版本的這些。

您可以通過使用一些函數指針解決這個問題:

Vec2<int> &(Vec2<int>::*norm)() = &Vec2<int>::normalize; 

,然後使用,在def,作爲解釋here

+0

@Ockonal:'dot'是一個'const'方法,它必須反映在函數指針的類型中。 – 2011-03-20 16:30:02

+0

謝謝。對不起,我瞭解我的問題。 – Ockonal 2011-03-20 16:41:24

+0

@Ockonal:不用道歉! – 2011-03-20 16:43:14

2

當編譯器說:

<unresolved overloaded function type> 

看看你的指針到成員或函數指針(& VEC 2 ::點),看看它是否是指一組的過載功能(它應該)。在這種情況下,您可能需要一個明確的static_cast <>指向特定的指向成員或函數指針類型,包括函數參數類型。

+0

看看文檔,標準化和點的另一個功能 - 儘管它們都是靜態的。 – ltjax 2011-03-20 15:25:31

+0

有趣...因爲&CLASS :: FUNCTION語法對於靜態也是有效的(儘管它使得&不必要,並且由於我喜歡將它放在我的代碼中),編譯器不能告訴你想要哪一個。即使它實際上不是指向成員的指針,也適用相同的原則。 – 2011-03-20 15:28:48