【问题标题】:Instantiate lua classes using Luabind使用 Luabind 实例化 lua 类
【发布时间】:2014-08-05 06:19:54
【问题描述】:

是否可以在 c++ 应用程序中使用 Luabind 实例化 Lua“类”?为了说明这个问题,请考虑以下简单的 Lua 脚本:

class "Person"

function Person:__init(name)
    self.name = name
end

function Person:display()
    print(self.name)
end

我可以在同一个 Lua 脚本中实例化这个类,并且一切正常。但是,我想在我的 c++ 应用程序中使用 Luabind 从这个类中实例化一个新对象。我尝试了以下方法:

luabind::object myObject = luabind::globals(L)["Person"]("John Doe");
myObject["display"]();

我希望看到控制台输出“John Doe”。相反,我遇到了 Lua 运行时错误。创建新对象的调用似乎有效。问题似乎是 self 在显示函数中为 nil。

【问题讨论】:

  • 您需要了解 luabind 期望您如何调用方法而不是普通函数和/或手动将对象传递给该调用中的显示方法。

标签: c++ lua luabind


【解决方案1】:

selfnil 因为如果你在 lua 中使用 ":" 运算符,那么 lua 会自动提供调用者作为第一个参数。 所以:

somePerson:display() == somePerson.display(somePerson)

因此,您也需要提供自我论证:

luabind::object myObject = luabind::globals(L)["Person"]("John Doe");
myObject["display"](myObject);

甚至更好:使用 luabind 中可用于该目的的简单函数

luabind::object myObject = luabind::globals(L)["Person"]("John Doe");
luabind::call_member<void>(myObject, "display");

【讨论】:

    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 2011-10-26
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2010-12-29
    • 2011-11-18
    相关资源
    最近更新 更多