LUA和C 繫結的一些天然的麻煩

2022-04-28 18:36:13 字數 1307 閱讀 7547

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

而且其實這部分問題不光是luatinker乙個人的問題,大部分c++和lua繫結庫都有類似問題,比如luabind,luaplus,tolua++等。

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

socket 的一些麻煩

在vs2010 上面倒是可以編譯的源 但是換到2008上,編譯就出現了如下錯誤資訊。sockaddr in 未宣告的識別符號 包含的標頭檔案是windows.h 最後還是有了結果,就是 在 sockaddr in 的前頭 加上 struct.還有錯誤 error c2275 socket 將此型別用...

學習Lua的一些困惑

學習lua的一些困惑 下面是我寫的 myclass function myclass.myf respath print respath的型別是 type respath n m id 這是乙個例項 print m id的型別是 type m id n endfunction game main r...

lua 日期的一些函式

根據日期獲取星期幾 function getweeknum strdate local ymd split strdate,t os.time local weeknum os.date t t wday 1 if weeknum 0 then weeknum 7 endreturn weeknum...