我目前正在一個遊戲項目中,並且必須將Lua整合到遊戲引擎中,以將遊戲對象和組件的界面暴露給腳本用戶。Lua C++類綁定垃圾收集關
我試圖研究如何將C++類對象綁定到Lua,並且我發現大多數文檔解釋瞭如何使用userdata類型來完成它。然而,我們的項目自己管理遊戲對象(這意味着我們決定何時刪除,創建遊戲對象),我不知道是否可以禁用Lua的垃圾回收。具體來說,我可以嘗試用metatable替換__gc
爲零還是不起作用的函數?
我的補償是使用包含lightuserdata(this指針)的表和靜態函數來檢索「this指針」並手動調用成員函數。但是,由於程序員應該手動進行封裝靜態功能,因此很快就會變得很髒並且很難管理。
我可以獲得一些鏈接,以獲得正確使用的良好文檔或針對類似問題的解決方案嗎?
謝謝你的迴應。 然而,我並沒有完全明白讓lua userdata成爲普通指針。 1.與此有什麼特別的區別和使用lightuserdata? 2.它如何有益? – user2883715
@ user2883715 userdata和light userdata之間的一個主要區別是,只有userdata對象具有每個對象元表;這是因爲輕量級用戶數據基本上就像一個數字,只有'void *'而不是'double'(或者任何您配置爲數字數據類型的數據)。這就是爲什麼當你需要每個對象的元表時,你需要使用userdata而不是light userdata。然後你應用另一級間接尋常的原則 - 如果你想用指針或智能指針的userdata,那就是你堅持的原則...... –