我有一個C++主機,我使用tolua ++向Lua公開一些類。其中一個類有一個函數,它應該註冊一個來自lua的回調函數。所以當C++代碼需要調用一個Lua註冊函數時,它可以。該功能是一個表/類功能。我之前用字符串函數名(不是lua「類」的一部分)成功完成了這個,但我很好奇,如果我能夠以某種方式存儲Lua函數而不是函數名。從C++ Lua回調
我定義我的盧阿類,如:
MyClass = {}
function MyClass:Create()
local obj = {}
-- copy all functions from MyClass table to this local obj and return it
local k,v
for k,v in pairs(obj) do
obj[k] = v
end
return obj
end
function MyClass:Enter()
self.CPlusClass = CPlusClass:Create() -- this is the C++ class creation, I defined a static function Create()
self.CPlusClass:RegisterCallback(15, self.Callback) -- this is where I want to pass this instances function to be called back from the C++ class
end
function MyClass:Callback(reader)
-- I want to be able to use self here as well so it needs to be the same instance
end
的MyClass的內幕:輸入()是我想要註冊的LUA「類」功能MyClass的::回調是能夠從C叫++目的。我如何將它傳遞給C++函數?類型是什麼,以便它會調用MyClass:C++中的Callback(),並傳入「self」,以便它是類的相同「實例」?
所以我知道'自我'指的是我創建的一個實際變量,我假設它將在全局表中由變量名構成,但是當你在lua的「類」中時,我怎麼能告訴變量名'自我「也指的是?如果我可以將它傳遞給我的C++函數並將其作爲字符串存儲,以便我可以調用getglobal來獲取特定的表,然後我也可以將表函數名作爲字符串傳遞給C++,得到這個,並稱之爲。但問題是,如何將'self'轉換爲它所指向的實際變量名稱,以便我可以在C++中調用getglobal來獲取該表格?
'self'不是全局的,self是'table:function'語法糖定義的自動變量。函數表:class(args ...)... end'與'function table.class(self,args ...)... end'完全相同。類似地,對「tab:class(args ...)」的調用與「tab.class(tab,args ...)」相同(儘管tab僅評估一次)。 –
我明白這一點。然而,我自己所指的是我在我的lua程序中創建的一個表格。我怎麼知道自我所指的是什麼變量名? – user441521
您不能從其表「對象」中取消關聯函數,並在稍後再次對該表「對象」進行處理。你需要創建一個閉包作爲你的回調函數來做你想做的事情。 –