我正在用C++写一个游戏引擎,该引擎将提供Lua脚本(为此我使用Luabind进行包装),并且在绑定(bind)重载函数时遇到一些问题。即:我有一个重载的功能: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文档中,但出现错误(第一个):
但是无论如何都会出现问题,因为这个函数是继承的(它来自
NxOgre::Actor::
,所以我仍然不是正确的方法编辑2:
我刚刚尝试用3个浮点数作为参数绑定(bind)函数的版本,并且……令人惊讶的是,所有的编译都很好,但是使用vector3的版本却不....
这是我用来实现3 float函数的内容:
.def("setGlobalPosition", ( void(Critter::Body::*)(float,float,float) ) &Critter::Body::setGlobalPosition )
我为此感到难过;(
最佳答案
正如DeadMG所指出的,您在成员函数之前缺少一个&符号。您链接的教程也丢失了它。一些编译器可能不在乎,但是g++确实可以,也许其他一些编译器也可以。
关于c++ - 如何用Luabind绑定(bind)重载函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5771714/