2011-04-24 38 views
2

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

我难倒这个(

+1

是的,请确实附上错误。我想你只是忘了'&'。 – Puppy 2011-04-24 16:36:30

+0

以防万一有人没有看到它:我附加了错误和另一种方法来做到这一点 - 我认为是适当的,但仍然有一些错误。 – Patryk 2011-04-24 17:32:52

回答

0

由于DeadMG指出的那样,你缺少的成员函数之前的符号。你链接的教程也缺少它。一些编译器可能不在意,但g ++确实可能,也可能有其他一些编译器也这样做。

+0

我确实放了'&',但没有改变任何东西。 – Patryk 2011-04-24 18:24:11

1

这个问题现在看来很老,但我想既然你还没有回答您的最新编辑:

((void(Critter::Body::*)(Vector3)) &Critter::Body::setGlobalPosition) 

中缺少的功能型const属性和参考符号来投到。它必须是:

((void(Critter::Body::*)(const Vector3&)) &Critter::Body::setGlobalPosition) 
+0

我几乎忘记了这个问题,说实话:)我会尝试稍后使用你的代码,我会发布一些结果;) – Patryk 2012-02-06 17:37:31