C 呼叫lua函式的一種通用辦法

2021-05-23 01:15:54 字數 655 閱讀 7226

在c++中呼叫lua函式的一般方式如下:

如果有很多個指令碼函式需要呼叫,按上面的方式就要寫很多個與之對應的c++函式,當然也可以利用c++的過載,把函式名作為引數,每種引數組合實現乙個過載函式,則上面的**可以改為:

如果有兩個不同的lua函式,它們的引數是一樣的,則可以共用同乙個common_call,但是不同的引數組合就必須有乙個與之對應的common_call,實現起來還是很麻煩,重複**仍然很多。《programming in lua》上提供了一種通用的辦法,用變長引數實現的,見http://www.lua.org/pil/25.3.html 但是仍然覺得不是太好,那個描述字串很難看!一番思考後折騰出了下面這個方法:

對於不同型別的引數,唯一不同的就是壓棧時的api不一樣,數字使用lua_pushnumber,bool型是用lua_pushbool,字串是用lua_pushstring等,所以抽象出乙個引數基類來,提供乙個虛擬的pushvalue介面,然後各種實際型別實現自己的pushvalue就可以了,**如下:

看起來問題已經解決了,但是仍然不夠徹底,使用者需要自己去構造乙個targ*的vector,對於每一種引數型別,使用者需要知道它對於的基類是什麼,下面把引數做進一步的封裝:

然後使用者需要呼叫lua函式的時候只需要構造乙個targpool物件就行了:

這樣基本上滿足需求了~

C 呼叫Lua的函式

經過前面幾章的介紹,相信大家對lua的堆疊已經比較熟悉了,如果還不是很熟悉的朋友,建議多看幾遍前面的教程,或者多敲幾次 那麼,如果已經對lua 的堆疊比較熟悉,接下來的內容就很簡單了。今天我們來看看c 如何呼叫 lua的函式,先看看現在 lua檔案是什麼樣的 plain view plain cop...

Lua呼叫C 的函式

1.lua呼叫 c 的函式 lua要呼叫 c 的函式還是蠻方便的,首先,我們來建立乙個 c 函式先 cpp view plain copy print public static intgetnumber intnum inthellolua getnumber intnum 類的什麼的,我就忽略了...

Makefile的一種通用寫法

管理linux環境下的c c 大型專案,如果有乙個智慧型的build system會起到事半功倍的效果,本文描述linux環境下大型工程專案子目錄makefile的一種通用寫法,使用該方法,當該子目錄內的檔案有增刪時無需對makefile進行改動,可以說相當的智慧型。下面先貼 為減小篇幅,一些非關鍵...