Отказ от ответственности: я написал библиотеку, которую я собираюсь рекомендовать
Вы можете попробовать использовать эту LuaWrapper Библиотека, которая звучит так, как будто она будет обрабатывать то, что вы пытаетесь сделать,Это даже не библиотека, это просто один заголовочный файл.
Вы можете использовать luaW_push<MyType>(L, myObj);
, чтобы подтолкнуть ваши объекты в Lua.Lua не будет владеть объектами, которые вы создаете из C ++, если вы не запустите на них luaW_hold<MyType>
.Другими словами, если вы не скажете Lua, он не будет собирать мусор для вашего объекта.
И наоборот, вы можете использовать MyType.new()
в своем коде Lua для создания объекта, которым Lua владеет .Это будет сбор мусора, как и следовало ожидать.Если вы хотите передать владение C ++, вы можете вызвать luaW_release<MyType>
для вашего объекта.
Есть также такие функции, как luaW_to<MyType>
и luaW_check<MyType>
, и в ограниченной степени он корректно поддерживает наследование от базовых типов (хотя на данный момент он допускает только одиночное наследование).Я считаю, что это значительно упрощает мои собственные попытки совместного использования C ++ и Lua, потому что это делает управление владением указателем очень простым.