2014-06-15 52 views
0

是否可以使用Luabind從C++應用程序實例化Lua「類」?爲了說明這個問題,考慮下面這個簡單的Lua中:使用Luabind實例化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"](); 

我希望看到「李四」輸出到控制檯。相反,我遇到了一個Lua運行時錯誤。創建新對象的調用看起來很有效。問題似乎是self,在顯示功能,是零。

+0

您需要找出luabind希望你如何調用一個方法而不是一個普通的函數和/或手動將該對象傳遞給該調用中的顯示方法。 –

回答

1

自我,因爲如果你使用了「:」 - 在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");