2011-07-14 20 views
4

我有很多C++代碼,其中包含很多名稱空間中的函數和類(例如boost)。
現在我試圖嵌入LuaJiT2作爲腳本引擎,但我找不到任何有關調用函數和使用其他命名空間的東西。
那麼,是否有可能通過FFI將函數從C++名稱空間傳遞給LuaJIT?是否可以使用luajit ffi的C++名稱空間中的函數?

+2

我假設你需要通過extern「C」將它們導出爲C風格的裝飾,但是我懷疑你能夠獲得類方法/模板或非導出名稱空間函數的任何東西 – Necrolis

+0

將提升Lua可能也不是一個好主意。根據您的實際使用情況,您最好公開一個功能有限的API。 – jsimmons

+0

謝謝@jsimmons,但boost是一個例子,「基於你的實際用例的功能有限的API」比增強庫的功能要大得多。 –

回答

8

您可以使用標準的Lua API向Lua公開名稱空間範圍函數以及類靜態函數。這與正常的Lua解釋器完全相同,因爲LuaJIT與其兼容。

但是您不能使用FFI,因爲FFI基於基於C的頭文件解析。你正在使用C++語法。 FFI不是只有使用LuaJIT的方式;它只是一個基於C.

任何使用Lua(Luabind,SWIG等)的特定於C++的綁定API都可以在LuaJIT中正常工作。

2

有可能使用不同的名字改編其他比C之所以它不是「共同」是因爲C++名稱重整是很不具體的編譯器/平臺: http://lua-users.org/lists/lua-l/2011-07/msg00502.html

所以這種聲明是有效的:

ffi.cdef[[ 
void Test1_Method1(void) asm("_ZN5Test17Method1Ev"); 
]] 

然後你可以調用Test1_Method1。 Mike Pall在luajit上做了一件了不起的工作。很多很棒的功能。

相關問題