Связывание Lua с объектами C++

Как решается проблема связывания конкретных методов 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;
}

Как можно улучшить ситуацию?
  • Вопрос задан
  • 3371 просмотр
Решения вопроса 1
@NeonMercury
А не задумывались над luabind?
Да, разбираться и компилировать немного нетривиально, но это того стоит. Потом пробрасывать классы и объекты в lua - сплошное удовольствие. Вот пример кода:
https://github.com/NeonMercury/time-killer/blob/ma...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы