LUA和C++綁定的一些自然的麻煩

最近在看Luatinker的源代碼,打算本身改(仿寫)寫搞一個簡單的封裝C++和LUA的結合的庫,結果發現其實麻煩和困惑比想象的多。函數

好比這些點:lua

1)有時候使用模板的時候,引用會退化。指針

classtype &,通過模板參數後,會退化爲class type,這個在LuaTinker的實現裏面就有問題,你會發現tinker的引用就沒有起到做用。blog

這個我打算研究一下《C++模板》繼承

2)基本(非object)類型(好比int)的應用和指針的使用問題?文檔

由於大部分C++ to LUA的參數傳遞都是使用lua_pushnumber這類函數,這類函數確定不會考慮什麼引用問題的。而Luatinker在對於object類型,可使用引用(固然他的引用其實無效,見問題1)和指針,但對於非object類型,LuaTinker沒有提供相應的方法幫助你,使用相關方法是在class_name的地方不會獲得有效的類型名稱,並且Lua內部並無註冊這些基本類型的userdata,因此其實你用LuaTinker你其實不能使用基本類型的指針。get

3)const的指針和引用沒有獲得正確處理。table

因爲LuaTinker內部對於指針和引用的保存處理都是一個void *,因此其實LuaTinker並無考慮對於const的指針和引用應該如何處理,也就是是說,其實通過LuaTinker的綁定,其實會破壞const 的特性。LuaTinker對於類的metatable定義的修改函數,都是能夠修改類的成員的。這其實挺煩人(危險)的。模板

4)Lua種如何使用指針或者引用?class

把指針或者引用(引用其實仍是隻能包裝成指針)做爲user data給Lua使用固然是能夠的,但問題是Lua,至少是LuaTinker是不能本身直接建立一個指針(引用就先不扯淡了),固然你直接定義一個類型叫某某類的指針固然也能夠。但大部分Lua的綁定庫沒有這樣噁心本身。若是Lua不能直接建立一個指針,那麼你獲得一個指針的方法就只剩下了依靠函數返回值了(你把指針綁定在某個table上(包括全局)使用,其實仍是使用函數返回值)。

但確實是這樣嗎?

5)指針的指針,和指針的引用這樣的參數能使用嗎?

LuaTinker 應該沒考慮這類問題,呵呵。我考慮的是以Lua的機制,這種參數是否是也應該是沒有用處的。

因此是否是指針和引用其實只能在返回值上使用?這個和問題4殊途同歸。

6)多重繼承的問題,

LuaTinker沒有考慮這個問題,固然這個問題不是無解,只是麻煩程度而已。

 

並且其實這部分問題不光是Luatinker一我的的問題,大部分C++和LUA綁定庫都有相似問題,好比Luabind,luaplus,tolua++等。

畢竟C++和Lua是兩種思路差異很大的語言,我目前的困惑還挺大的。看來只有慢慢來了。

【本文做者是雁渡寒潭,本着自由的精神,你能夠在無盈利的狀況完整轉載此文檔,轉載時請附上BLOG連接:http://www.cnblogs.com/fullsail/,不然每字一元,每圖一百不講價。對Baidu文庫和360doc加價一倍】

相關文章
相關標籤/搜索