gpt4 book ai didi

c++ - 将 Lua 类对象存储到 C 指针并将其推回 Lua Stack

转载 作者:行者123 更新时间:2023-11-28 05:46:40 25 4
gpt4 key购买 nike

使用自制的 Lua C++ 绑定(bind),我能够创建可从 Lua 脚本获得的 C++ 类。

现在我想在 Lua 脚本中创建类对象,将其引用存储在 C++ 中,并在需要时从 C++ 代码调用此 Lua 类对象的函数。

在 Lua 脚本中,我创建了一个具有全局函数的类对象以将其传递给 C++ 代码。

MyClass = {}

function MyClass:hello()
debug.codeSite.sendMsg( "MyClass:hello()" )
end

function MyClass:new()
local tNewClass = {}

setmetatable( tNewClass, self )
self.__index = self

return tNewClass
end

local tClass = MyClass:new()

function getClass()
debug.codeSite.sendMsg( "Return class object" )
return tClass;
end

现在在 C++ 中,我想获取它的实例并调用函数 hello()。这是我尝试过的:

  1. 调用 getClass() 将 Lua 对象(一个表)压入堆栈。
  2. 使用函数 lua_topointer() 将其地址存储到 C++ const void* 中。

此时我不知道如何将这个指针推回Lua栈,所以将Lua表推回栈,插入函数名再调用。

所有这一切的想法是在 Lua 脚本中创建几个对象并在 C++ 中使用它们。

在 lua 中:

tObject1 = MyClass:new()
tObject2 = MyClass:new()

在 C++ 中,需要时使用 tObject1:hello() 或 tObject2:hello()。

编辑:

根据这个description of lua_topointer() , 将 Lua 表转换为 C 指针仅用于调试目的。

谢谢。

最佳答案

使用 luaL_ref() 将 lua 对象存储在预定义的 Lua 注册表中,并在 c++ 中保存返回的整数索引。当您需要将 Lua 对象放入 Lua 堆栈时,使用 lua_rawgeti() 从注册表中读取它,使用之前检索到的索引。当您在 C++ 端不再需要它时,不要忘记使用 luaL_unref() 取消引用对象。

关于c++ - 将 Lua 类对象存储到 C 指针并将其推回 Lua Stack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36087730/

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