Я пишу игровой движок на c ++, который будет предоставлять сценарии Lua (для обертывания которого я использую Luabind), и у меня возникают некоторые проблемы с привязкой перегруженных функций. А именно: у меня перегружена функция:
void setGlobalPosition(const Vec3& position);
void setGlobalPosition(Real x, Real y, Real z);
И я хотел бы раскрыть их обоим Луа.
очевидно, это неправильно:
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> )
но все равно ошибки.
Есть идеи, как мне это сделать?
EDIT:
Хорошо, я нашел способ сделать это так:
.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 )
Я в замешательстве об этом; (