我正在用 c++ 编写一个游戏引擎,它将提供 Lua 脚本(我正在使用 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:“类型转换”:无法从“重载函数”转换为“void (__thiscall Critter::Body::*)(Ogre::Vector3)”
但无论如何,问题出现了,因为这个函数是继承的(它来自NxOgre::Actor::
所以我无论如何都不是正确的方法
编辑 2:
我刚刚尝试将函数的版本与 3 个浮点数作为参数绑定,并且......令人惊讶的是,一切都编译得很好,但带有 vector3 的版本却没有...... :(
这是我用来实现 3 float 功能的:
.def("setGlobalPosition", ( void(Critter::Body::*)(float,float,float) ) &Critter::Body::setGlobalPosition )
我对此感到难过;(