【问题标题】:using a pointer from a C++ object, to another C++ object, to modify member variables, from Lua使用从 C++ 对象到另一个 C++ 对象的指针来修改 Lua 中的成员变量
【发布时间】:2013-03-05 14:52:39
【问题描述】:

如何在 Lua 脚本中从另一个 C++ 对象获取对 C++ 对象的引用?我真的不知道如何正确地用语言来概括,所以让我先用一个 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)

【问题讨论】:

  • 我认为你的间接性还不够,是吗?
  • @RichardJ.RossIII 我确实有几个间接级别,但似乎不是因为我试图将问题简化为根本问题。除非你的意思是我的措辞令人困惑,否则我的错,我倾向于漫无目的。
  • 这将有助于显示 A 的 Luabind 代码。
  • @LucDanton 你去吧,我把它放好了
  • "每个返回指针的函数都遇到同样的问题,Lua 无法修改原始对象。" 你能证明这一点吗?显示a short, complete program that exhibits this behavior.

标签: c++ lua luabind


【解决方案1】:

也为“组件”制作一个 Lua 包装器。然后让a:getComponent() 返回 Lua 对象,而不是 C++ 对象的真正引用。在该新包装器对象上添加您需要的任何方法。如果您有更多“对象”,请冲洗并重复。

简而言之:对于您想从 Lua 操作的每个对象,您都必须创建一个 Lua 包装器。解决这个问题的唯一方法是在顶级对象上创建额外的函数,并从 Lua 调用这些函数(a:setComponentVariable(0) 而不是 a:getComponent() + compo:setVariable(0))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    相关资源
    最近更新 更多