2

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

我对此感到难过;(

4

2 回答 2

1

This question seems quite old now, but I figured since you still don't have the answer to your latest edits:

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

is missing the const qualifier and reference-ampersand in the function-type to cast to. It's got to be:

(( void(Critter::Body::*)(const Vector3&) ) &Critter::Body::setGlobalPosition)
于 2012-02-06T10:21:49.163 回答
0

正如 DeadMG 指出的那样,您在成员函数之前缺少一个&符号。您链接的教程也缺少它。一些编译器可能不关心,但 g++ 会关心,并且可能其他一些编译器也会关心。

于 2011-04-24T17:02:52.697 回答