gpt4 book ai didi

c++ - 使用 C++ 对象的指针指向另一个 C++ 对象,从 Lua 修改成员变量

转载 作者:太空狗 更新时间:2023-10-29 23:18:01 25 4
gpt4 key购买 nike

如何在 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 和组件都已绑定(bind)到 Lua,以及所需的方法。

我是不是在句法上遗漏了什么,或者还有更多?

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

编辑

这是 luabind 代码。我总结了一下,因为还有一堆与问题无关的其他绑定(bind):

luabind::class_<A>("A")
.def("getComponent", &A::getComponent)

最佳答案

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

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

关于c++ - 使用 C++ 对象的指针指向另一个 C++ 对象,从 Lua 修改成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com