使用C++对象的指针,将其指向另一个C++对象,通过Lua来修改成员变量。

如何从另一个 C++ 对象中的 Lua 脚本中获取对 C++ 对象的引用?我不知道如何适当地用语言概括它,所以让我先通过一个 Lua 示例来详细说明:

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

a 是一个 C++ 对象,而 getComponent 函数返回一个指针:

// 在 A.h 中
Component* A::getComponent();

似乎问题是 getComponent() 将 Component 对象的副本传递给了 Lua,而不是引用。我对每个返回指针的函数都遇到了同样的问题,Lua 无法修改原始对象。

如果我在 Lua 中修改 a 中的变量,则 a 似乎是正常工作的,其结果会在 C++ 中反映出来。 A 和组件以及所需的方法已经绑定到 Lua 了。

我是否在语法上漏掉了什么,还是还需要更多的操作?

我正在使用 luabind、Lua 5.1 和 MinGW。提前感谢任何帮助。

编辑

以下是 luabind 代码。我进行了总结,因为还有许多其他绑定与该问题无关:

luabind::class_<A>("A")
    .def("getComponent", &A::getComponent)
点赞
用户312586
用户312586

在“component”上制作一个 Lua 封装器。然后让 a:getComponent() 返回 Lua 对象,而不是 C++ 对象的实际引用。在这个新的封装对象上添加任何你需要的方法。如果你有更多“对象”,则需反复这样做。

简而言之:对于想要从 Lua 操纵的每个对象,您都必须创建一个 Lua 封装器。唯一的例外是在顶级对象上创建额外的函数,然后从 Lua 调用这些函数(a:setComponentVariable(0) 而不是 a:getComponent() + compo:setVariable(0))。

2013-03-21 16:33:00