自從把lua與c++結合起來使用以後,解決了我以前非常頭痛的幾個問題,其中有兩個是特別明顯的,第乙個,就是c++的各種物件的訪問.第二個,就是程式源**的管理.
這些問題的起因,是我一般是使用vs的mfc程式設計.在mfc程式設計中,大家都知道的,就是很多的類物件都是存放在幾個不同的框架,或檢視類中的,從框架類中訪問檢視類的物件,或者反過來,在檢視類中訪問框架類的物件.這種反覆的呼叫,很讓人頭痛.再加上,mfc的訊息機制,讓我們程式的某個功能,即可以在框架類中實現,也可以在檢視類中實現,更可以,你實現的這個功能的**就放在某個小角落裡面.如果只實現簡單的功能,這樣做沒有問題.如果是一些比較複雜的功能,例如,多實現幾個按鈕的功能,那麼,第一次開發的時候腦子裡有映象,這也沒有問題.但是,當一段時間過後,你要對這些**進行修改的時候,會非常的痛苦.因為,與某個功能相關的**,可能會出現在n個地方.跨類物件訪問和多種實現機制的相互制約,當程式複雜到一定程度的時候,對後繼的程式功能的修改或公升級或debug,會讓程式設計師的工作量大大的增加.
後來,接觸到了lua,根據lua與c++的各自的特點,我想到了一種模式.
這種模式的主要特點就是,用lua實現程式的各種邏輯,用c++為lua擴充套件底層的基礎函式庫.
在這種模式下,c++的開發將會變得簡單,因為,c++本身不再處理與程式邏輯相關的任何事情,只是封裝一些基本功能的**庫,比如,與xml操作相關的各種基本類和函式,與ado相關的基本類和函式,通過lua的loadlib函式,呼叫封裝了這些功能的基本dll庫後,在lua中就可以實現這些功能的各種應用.當c++不再處理程式的各種複雜邏輯之後,我們編寫c++的基本應用庫就會很簡單.
lua實現各種程式邏輯時,如果按照一定的原則進行,那對lua的源**的管理,會比c++簡單,例如,我編寫了乙個對話方塊程式,這個對話方塊的各種功能描述函式,只要放在某個特定的lua指令碼檔案中就可以了.如果我們要除錯這個對話方塊的功能,或對其進行修改,那麼,我們只需要在乙個檔案中進行操作,而像c++那樣,可能幾個檔案同時修改的情況就不會發生.
通過lua控制c++的記憶體管理,也會給我們帶來乙個很大的好處,那就是,lua呼叫c++生成的各種物件,在同乙個lua環境中,是可以直接相互訪問和操作的.
另外,lua指令碼對c++而言,只是一串串的字元.這個特性,也為我們提供了怎麼解決重複性開發的問題.例如,對製作乙個基於對話方塊的應用而言,我們可以將生成對話方塊的各種基本要素進行底層封裝.然後,在這個底層封裝的基礎上,對一些個性的應用,可以根據一定的規則動態的生成**,就像動態生成字串那樣.當這種應用成熟的時候,我們如果要生成某個程式的各種功能的話,可能只需要編輯某個程式,然後通過該程式,就可以自動的生成實現這些功能的lua指令碼,而不需要自己寫太多的重複性的**.
綜上所述,lua與c++的聯合開發,有如下幾個特點:
1,降低c++的開發難度,c++程式設計師,只需要寫一些基本的函式功能庫,而不用去實現複雜的程式邏輯.
2,複雜的程式邏輯的實現,將會由lua程式設計師來編寫,他們只需要知道lua的基本知識,和c++程式設計師提供的庫及相應的庫的使用方法,就可以開始寫程式了.這對程式設計師的技術要求,會大大的降低.lua程式設計師,不用去考慮ado的具體的實現方式,只需要會用c++程式設計師寫好的封裝就行了.
3,就像c++操作字串那樣,我們可以對很多固定的lua指令碼,通過程式自動生成,lua程式設計師只需要修改一些個性的功能,就可以完成程式的開發,隨著c++基本庫的積累和lua指令碼庫的積累,同一樣類似的幾個功能,lua程式設計師,第二次開發的速度將會比第一次提高很多.
這種聯合開發模式也有幾個比較明顯的缺陷:
1,lua在呼叫c++物件時,lua的記憶體管理機制會存在問題,我自己在寫將乙個列表中的資料插入到資料庫中時,當時有1000多條資料.在迴圈執行插入資料操作時,因為lua不能及時的釋放記憶體,會導致程式的記憶體溢位.
2,lua的除錯遠沒有c++的偵錯程式那麼方便.(這或許是因為,我沒有在這方面花精力的原因吧)
C 呼叫lua函式的一種通用辦法
在c 中呼叫lua函式的一般方式如下 如果有很多個指令碼函式需要呼叫,按上面的方式就要寫很多個與之對應的c 函式,當然也可以利用c 的過載,把函式名作為引數,每種引數組合實現乙個過載函式,則上面的 可以改為 如果有兩個不同的lua函式,它們的引數是一樣的,則可以共用同乙個common call,但是...
Lua 實現switch的一種方案
local et case one 1 local et case two 2 local function do case one print do case one endlocal function do case two print do case two endlocal function...
設計模式的一種 命令模式
命令模式是關於怎麼樣處理乙個物件請求另乙個物件呼叫其方法完成某項任務的一種模式,在命令模式中,當乙個物件請求另乙個物件呼叫其方法失,而又不想和被呼叫的物件發生直接關係,而是把請求組封裝在乙個請求物件中,既是把引用封裝在方法中,以達到傳送命令的效果 在呼叫時 被呼叫的只需要和命令物件打交道,四種角色 ...