2015-06-03 3 views
2

Я хочу передать объект C++ в Lua и использовать тот же объект в Lua. Я видел пример создания объектов C++ в Lua и их использования. Но я хочу сделать это ниже.Можем ли мы передать объект C++ в сценарии Lua

  • Создание C++ объект в коде C++
  • Передайте это скрипты Lua и получить возвращаемые значения.

Здесь я привел эти примеры.

http://loadcode.blogspot.sg/2007/02/wrapping-c-classes-in-lua.html 
https://gist.github.com/kizzx2/1594905 

Но они создают объекты C++ в Lua и используют их в сценариях Lua. не могли бы вы дать несколько указателей.

+0

Вы имеете дело с ними как указатели. Вы читали [Справочное руководство Lua] (http://www.lua.org/manual/5.3/)? В нем есть несколько глав по этому вопросу, и с примерами, которые у вас есть, должно быть хорошо. –

+0

Невозможно «создать их в Lua». – user3125367

ответ

1

Поскольку вы не хотите использовать объекты в Lua (просто передайте их на C++), вы можете обернуть их как lightuserdata (см. here) из C++, а затем просто поместите его (вы можете проверить если это is_lightuserdata ранее).

2

Учитывая, что вы прочитали несколько руководств по пользовательским данным, достичь этого очень легко. Единственное отличие состоит в том, что в регулярном руководстве ud они создают объекты в функции Lua, и у вас уже есть объект. Просто нажмите новые userdata размера указателя и установите его метатебель в метатебель класса Lua (который вы все равно подготовили).

void **ud; 
ud = lua_newuserdata(L, sizeof(*ud)); 
*ud = object; // existing 

luaL_getmetatable(L, tname); 
lua_setmetatable(L, -2); 

// ud at top of stack 

lua_setglobal(L, "foo"); 

Адрес электронной почты, где tname - это ваше Lua-side классы.

+0

Вам не хватает какого-то типа литья. – Marcs