我正在写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