使用Luabind实例化lua类

时间:2014-06-15 04:14:43

标签: c++ lua luabind

是否可以使用Luabind从c ++应用程序中实例化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为零。

1 个答案:

答案 0 :(得分:1)

self nil ,因为如果你在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");