2011-04-24 84 views
2

我正在寫C++中的遊戲引擎,它將提供Lua腳本(我正在使用Luabind進行封裝),而且我有一些問題需要綁定重載函數。即:我有我的重載函數:如何用Luabind綁定重載函數?

void setGlobalPosition(const Vec3& position);

void setGlobalPosition(Real x, Real y, Real z);

而且我想這兩個暴露到Lua。 顯然這是錯誤的:

luabind::module(L)[ luabind::class_<Critter::Body>("Body") .def("setGlobalPosition", &Critter::Body::setGlobalPosition) ];

我已經找到一種方法來做到這一點本網站http://www.codeproject.com/KB/graphics/luabindLuaAndOgre3d.aspx?msg=3376320(很好的教程Luabind - 我強烈推薦它)是這樣的:

luabind::module(L)[ luabind::class_<Critter::Body>("Body") .def("setGlobalPosition", (void(Critter::Body::*)(const Vector3&))Critter::Body::setGlobalPosition) ];

但它也給我錯誤(如果有人感興趣,我可以附加它們)。

我也試過 .def("setGlobalPosition", Critter::Body::setGlobalPosition<Vector3>) 但仍然有錯誤。

任何想法我該怎麼做?


編輯: 好吧,我已經找到一種方法來做到這一點像:

.def("setGlobalPosition", (void(Critter::Body::*)(Vector3)) &Critter::Body::setGlobalPosition) 

從luabind文檔,但我得到的錯誤(第一個):

錯誤C2440:'type cast':無法將 從'overloaded-function'轉換爲 'void(__thiscall Critter :: Body :: * )(Ogre :: Vector3)'

但不管怎麼說,問題出現的Cuz這個功能是繼承(它來自NxOgre::Actor::所以我不認爲正確的做法反正


編輯2:

我剛纔想綁定功能的版本與3花車作爲參數和......令人驚訝的是一切都編譯得很好,但與vector3版本不....(

這是我用來實現3浮動功能:

.def("setGlobalPosition", (void(Critter::Body::*)(float,float,float)) &Critter::Body::setGlobalPosition) 

我難倒這個(

+1

是的,請確實附上錯誤。我想你只是忘了'&'。 – Puppy 2011-04-24 16:36:30

+0

以防萬一有人沒有看到它:我附加了錯誤和另一種方法來做到這一點 - 我認爲是適當的,但仍然有一些錯誤。 – Patryk 2011-04-24 17:32:52

回答

0

由於DeadMG指出的那樣,你缺少的成員函數之前的符號。你鏈接的教程也缺少它。一些編譯器可能不在意,但g ++確實可能,也可能有其他一些編譯器也這樣做。

+0

我確實放了'&',但沒有改變任何東西。 – Patryk 2011-04-24 18:24:11

1

這個問題現在看來很老,但我想既然你還沒有回答您的最新編輯:

((void(Critter::Body::*)(Vector3)) &Critter::Body::setGlobalPosition) 

中缺少的功能型const屬性和參考符號來投到。它必須是:

((void(Critter::Body::*)(const Vector3&)) &Critter::Body::setGlobalPosition) 
+0

我幾乎忘記了這個問題,說實話:)我會嘗試稍後使用你的代碼,我會發布一些結果;) – Patryk 2012-02-06 17:37:31