最近在看Luatinker的源代碼,打算自己改(仿寫)寫搞一個簡單的封裝C++和LUA的結合的庫,結果發現其實麻煩和困惑比想象的多。 比如這些點: 1)有時候使用模板的時候,引用會退化。 classtype &,經過模板參數後,會退化為class type,這個在LuaTinker的實現裡面就有問題,你會發現tinker的引用就沒有起到作用。 這個我打算研究一下《C++模板》 2)基本(非object)類型(比如int)的應用和指針的使用問題? 因為大部分C++ to LUA的參數傳遞都是使用lua_pushnumber這類函數,這類函數肯定不會考慮什麼引用問題的。而Luatinker在對於object類型,可以使用引用(當然他的引用其實無效,見問題1)和指針,但對於非object類型,LuaTinker沒有提供相應的方法幫助你,使用相關方法是在class_name的地方不會得到有效的類型名稱,而且Lua內部並沒有注冊這些基本類型的userdata,所以其實你用LuaTinker你其實不能使用基本類型的指針。 3)const的指針和引用沒有得到正確處理。 由於LuaTinker內部對於指針和引用的保存處理都是一個void *,所以其實LuaTinker並沒有考慮對於const的指針和引用應該如何處理,也就是是說,其實經過LuaTinker的綁定,其實會破壞const 的特性。LuaTinker對於類的metatable定義的修改函數,都是可以修改類的成員的。這其實挺煩人(危險)的。 4)Lua種如何使用指針或者引用? 把指針或者引用(引用其實還是只能包裝成指針)作為user data給Lua使用當然是可以的,但問題是Lua,至少是LuaTinker是不能自己直接創建一個指針(引用就先不扯淡了),當然你直接定義一個類型叫某某類的指針當然也可以。但大部分Lua的綁定庫沒有這樣惡心自己。如果Lua不能直接創建一個指針,那麼你得到一個指針的方法就只剩下了依靠函數返回值了(你把指針綁定在某個table上(包括全局)使用,其實還是使用函數返回值)。 但確實是這樣嗎? 5)指針的指針,和指針的引用這樣的參數能使用嗎? LuaTinker 應該沒考慮這類問題,呵呵。我考慮的是以Lua的機制,這種參數是不是也應該是沒有用處的。 所以是不是指針和引用其實只能在返回值上使用?這個和問題4異曲同工。 6)多重繼承的問題, LuaTinker沒有考慮這個問題,當然這個問題不是無解,只是麻煩程度而已。