【发布时间】:2019-03-23 12:28:10
【问题描述】:
我有一个用 C++ 构造的大对象(我已经暴露给 Lua),我想在 Lua 中进行处理。
我可以使用lua_pushinteger、lua_pushstring 将任何简单类型传递给 Lua 函数(int、string),但不能使用 C++ 类。我试过lua_pushlightuserdata,通过将指针推送到我的对象,但没有运气。
function process(object) --object is the c++ passed function
--return processed data
end
我该怎么做?这可能吗?
请注意,我想将一个用 C++ 构建的特定实例传递给 Lua。我可以公开构造函数并简单地使用类,但我需要使类成为单例。这是不可接受的。
【问题讨论】:
-
Here 是使用 Lua Bridge 注册类类型的示例。请注意,您可以覆盖
__call运算符以防止构造类(或者在您的情况下返回单例,请参阅:链接示例中的 DoNotCreate 和 DoNotGarbageCollect)。从那里你会得到一个 LuaRef 到process函数并将对象作为参数传递。 LuaBridge 自动将指针转换为可以在 lua 脚本中使用的 LuaRef (lightuserdata)。 -
请注意,当您在 Lua 中调用成员函数时,您使用
object:memberfun(...)语法,因为:将object作为隐藏的this参数传递。 -
@JamesPoag 我确实成功注册了课程。确实提到了“(我已经将(类)暴露给 Lua)”。我唯一的问题是我不能将类作为参数传递给函数。再一次,我可以传递简单类型(int、string)而不是类。
-
你在传递一个指针吗?
-
是的。我将一个指针(指向我的类)传递给 lua_pushlightuserdata 。 lua_pushlightuserdata 只接受一个指针。