使用Luabind实例化lua类 是否有可能使用C++应用程序的LuabFin实例化Lua“类”?为了说明这个问题,考虑下面的简单的Lua脚本: class "Person" function Person:__init(name) self.name = name end function Person:display() print(self.name) end

使用Luabind实例化lua类 是否有可能使用C++应用程序的LuabFin实例化Lua“类”?为了说明这个问题,考虑下面的简单的Lua脚本: class "Person" function Person:__init(name) self.name = name end function Person:display() print(self.name) end,c++,lua,luabind,C++,Lua,Luabind,我可以用同一个Lua脚本实例化这个类,一切都很好。但是,我想使用我的C++应用程序中的LuabFin实例化这个类中的一个新对象。我尝试了以下方法: luabind::object myObject = luabind::globals(L)["Person"]("John Doe"); myObject["display"](); 我希望看到“JohnDoe”输出到控制台。相反,我遇到了一个Lua运行时错误。创建新对象的调用似乎有效。问题似乎是显示函数中的self为nil。self为nil,因

我可以用同一个Lua脚本实例化这个类,一切都很好。但是,我想使用我的C++应用程序中的LuabFin实例化这个类中的一个新对象。我尝试了以下方法:

luabind::object myObject = luabind::globals(L)["Person"]("John Doe");
myObject["display"]();
我希望看到“JohnDoe”输出到控制台。相反,我遇到了一个Lua运行时错误。创建新对象的调用似乎有效。问题似乎是显示函数中的
self
为nil。

self为nil,因为如果在lua中使用“:”运算符,则lua将自动提供调用者作为第一个参数。 因此:

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

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");
luabind::objectmyobject=luabind::globals(L)[“人”(“约翰·多伊”);
luabind::调用_成员(myObject,“display”);

您需要了解luabind希望您如何调用一个方法而不是普通函数和/或手动将对象传递给该调用中的显示方法。
luabind::object myObject = luabind::globals(L)["Person"]("John Doe");
luabind::call_member<void>(myObject, "display");