我正在寫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)
我難倒這個(
是的,請確實附上錯誤。我想你只是忘了'&'。 – Puppy 2011-04-24 16:36:30
以防萬一有人沒有看到它:我附加了錯誤和另一種方法來做到這一點 - 我認爲是適當的,但仍然有一些錯誤。 – Patryk 2011-04-24 17:32:52