程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LUA和C++綁定的一些天然的麻煩

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

編輯:C++入門知識

最近在看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沒有考慮這個問題,當然這個問題不是無解,只是麻煩程度而已。    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved