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

Как получить ссылку на объект 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)

3

Решение

Сделайте обертку Lua для «компонента» тоже. Тогда сделай a:getComponent() вернуть объект Lua, а не реальную ссылку на объект C ++. Добавьте любые необходимые методы для этого нового объекта-оболочки. Если у вас есть больше «объектов», промойте и повторите.

Вкратце: для каждого объекта, которым вы хотите манипулировать из Lua, вам нужно будет создать оболочку Lua. Единственный способ обойти это — создать дополнительные функции на объекте верхнего уровня и вызвать их из Lua (a:setComponentVariable(0) вместо a:getComponent() + compo:setVariable(0)).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]