2013-03-17 28 views
3

如何从Lua脚本中的另一个C++对象获取对C++对象的引用?我真的不知道该怎么总结,在单词正确,所以让我用一个Lua示例首先阐述:使用从C++对象到另一个C++对象的指针来修改成员变量Lua

function doSomething() 
    compo = a:getComponent() 
    compo:setVariable(0) 
end 

一个是一个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) 
+0

我不认为你有足够的间接性,你呢? – 2013-03-17 02:59:50

+0

@ RichardJ.RossIII我的确有几个层次的间接性,但它似乎是因为我试图将问题简化为根。除非你的意思是我的措词令人困惑,在那种情况下,我的坏话,我倾向于漫步。 – 2013-03-17 03:15:54

+0

这将有助于显示'A'的Luabind代码。 – 2013-03-17 03:19:10

回答

0

做一个Lua包装的“组件”了。然后让a:getComponent()返回Lua对象,而不是C++对象的真实参考。在新的包装器对象上添加您需要的任何方法。如果你有更多的“物体”,请冲洗并重复。

简而言之:对于你想要从Lua处理的每个对象,你都必须创建一个Lua包装器。唯一的解决办法是在顶层对象上创建额外的函数,并从Lua中调用这些函数(a:setComponentVariable(0)而不是a:getComponent() + compo:setVariable(0))。