我正在用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/

10-16 01:22