Как решается проблема связывания конкретных методов C++ с функциями Lua, при встраивании Lua в C++?
Находил много примеров, но все они используют устаревшие конструкции вроде luaL_register и luaL_openlib.
Пока использую следующее решение: сохранять указатель на оригинальный объект как userdata, а затем при вызове функции передавать этот указатель как параметр.
Но при таком подходе, код на Lua становится несколько .. неудобным.
Lua
body.setRotation(body.ptr, body.getRotation(body.ptr) + 0.1)
C++
int cmdGetRotation(lua_State* L)
{
IActor* actor = (IActor*)lua_touserdata(L, 1);
lua_pushnumber(L, actor->getRotation().getValue());
return 1;
}
int cmdSetRotation(lua_State* L)
{
IActor* actor = (IActor*) lua_touserdata(L, 1);
actor->setRotation(lua_tonumber(L, 2));
return 0;
}
Как можно улучшить ситуацию?