我正在用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:'type cast':不能 从'overloaded-function'转换为 'void(__ thiscall Critter :: Body :: * )(食人魔::的Vector3)'
但无论如何问题出现了,因为这个函数是继承的(它来自NxOgre::Actor::
所以我不是那个正确的方法
编辑2:
我刚刚试图用3个浮点数作为参数来绑定函数的版本......令人惊讶的是,所有编译都很好但是带有vector3的版本没有... :(
这是我用来实现3浮点函数的东西:
.def("setGlobalPosition", ( void(Critter::Body::*)(float,float,float) ) &Critter::Body::setGlobalPosition )
我对此感到难过;(
答案 0 :(得分:1)
这个问题现在看起来已经很老了,但我想你还没有得到你最新编辑的答案:
(( void(Critter::Body::*)(Vector3) ) &Critter::Body::setGlobalPosition)
缺少要转换为的函数类型中的const限定符和reference-ampersand。它必须是:
(( void(Critter::Body::*)(const Vector3&) ) &Critter::Body::setGlobalPosition)
答案 1 :(得分:0)
正如DeadMG指出的那样,你在成员函数之前缺少一个&符号。您链接的教程也缺少它。有些编译器可能不关心,但是g ++确实可能,而且其他一些编译器也可以。