Как получить ссылку на объект C ++ из другого объекта C ++ внутри сценария Lua? Я не знаю, как правильно выразить это словами, поэтому позвольте мне вначале остановиться на примере с Lua:
function doSomething()
compo = a:getComponent()
compo:setVariable(0)
end
a является объектом C ++, а функция getComponent возвращает указатель:
// inside A.h
Component* A::getComponent();
Кажется, проблема в том, что getComponent()
передает копию объекта Component Lua вместо ссылки. Я сталкиваюсь с той же проблемой с каждой функцией, которая возвращает указатель, Lua не может изменить исходный объект.
Кажется, что объект a работает правильно, если я изменяю переменную из Lua, его результат отражается в C ++. И A, и компонент уже связаны с Lua, а также с необходимыми методами.
Я что-то упустил синтаксически или есть что-то большее?
Я использую Luabind, Lua 5.1 и MinGW. Спасибо за любую помощь заранее.
РЕДАКТИРОВАТЬ
Вот код Luabind. Я суммировал это, потому что есть куча других связей, которые не имеют отношения к проблеме:
luabind::class_<A>("A")
.def("getComponent", &A::getComponent)
Сделайте обертку Lua для «компонента» тоже. Тогда сделай a:getComponent()
вернуть объект Lua, а не реальную ссылку на объект C ++. Добавьте любые необходимые методы для этого нового объекта-оболочки. Если у вас есть больше «объектов», промойте и повторите.
Вкратце: для каждого объекта, которым вы хотите манипулировать из Lua, вам нужно будет создать оболочку Lua. Единственный способ обойти это — создать дополнительные функции на объекте верхнего уровня и вызвать их из Lua (a:setComponentVariable(0)
вместо a:getComponent()
+ compo:setVariable(0)
).
Других решений пока нет …