假設讀者已經有了c++基礎,懂一點lua,用lua寫過一點腳本,最好還拿他和c++作了一些簡單的交互,接下來,但願讀者還能瞭解過一些面向對象的思想。c++
先引出問題:編程
用c++和lua完成交互,並讓lua能夠模塊化的功能調用, app
c++ 和lua 交互,這時lua屬於腳本語言, 解釋性語言。明確lua的做用,使用lua來實現模塊化的功能,完成業務層的功能,而此時c++ 爲底層各類功能進行封裝而且開放接口。模塊化
若是隻是簡簡單單的交互,無非是c++的函數導出,lua調用的時候把函數名註冊進來的時候c++能夠用根據傳進來的函數名進行動態調用本身的函數,這個是初步模型。函數
這裏咱們討論怎麼模塊化的導出到lua,讓lua更加簡便的來作業務層的功能,lua
1.首先若是咱們懂mfc的話先梳理下mfc的思路,win32是一個消息循環大概是下面這個樣子的: 一個window的窗口回調函數,而後根據參數 把消息ID分別進行處理,若是不懂win32編程不要緊,這裏有篇文章,(這個不看也不要緊),http://blog.csdn.net/hyman_c/article/details/53447695,mfc的思想就是 使用map吧每個消息id和函數對象進行關聯,而後吧全部窗口的對象經過繼承的時候把函數放入一個樹或者列表中,而後在最後一個回調函數中分別調用,沒有這個經驗,不懂不要緊。可是到這應該聽到了一個思想,map把對應的ID和函數對象自己進行了綁定。.net
2.接下來咱們看一個例子, love2d中是怎麼作的:對象
其中box2d,sdlwindow,畫圖功能(opengl),以及其餘功能了。 這些模塊其實就是c++模塊。blog
而後咱們以其中一個模塊來舉例,看下c++是怎麼作的,以love.graphics模塊,即opengl畫圖的模塊:繼承
love.graphics這裏的畫畫提供了lua的繪圖相關接口。
c++層分爲兩個:Graphics的封裝(模型層),提供最基本的封裝,很是接近lua要使用的接口,而後wrap_Graphics這裏是lua要調用c++真正要調用到的類,這個類,是lua真正要調用的類,沒錯就是這裏。
這裏wrap_Graphics是這樣實現,分別在之前的接口中從新實現了一套函數,藉着Graphics的基層,而後根據實際lua的須要,以及調用方式的改變,進行封裝,以後提供了一個map,他把全部的函數名字和函數對象分別放入map中,具體註冊的時候,只要提供模塊名,c++遍歷那個函數map,便把全部的函數註冊進入lua了。 下面是這個wrap_graphics中 的函數map
把這個存入函數列表的map做爲wrappedModule的成員變量。
-------------後面還要更新,前面寫的囉裏囉嗦,卻沒寫多少東西哦。這是我我的看到代碼後根據我說想到的,來寫到這篇博客的,喜歡的支持下