Можно ли использовать функции из пространств имен C++ с luajit ffi?

У меня есть много кода на C++, который содержит множество функций и классов в пространствах имен (например, boost).
Сейчас я пытаюсь встроить LuaJiT2 в качестве обработчика сценариев, но не могу найти ничего о вызове функций и использовании других вещей из пространств имен.
Итак, возможно ли передать функции из пространств имен C++ в LuaJIT с помощью FFI?

2 ответа

Решение

Вы можете использовать стандартный API Lua для предоставления Lua функций области пространства имен, а также статических функций класса. Это делается точно так же, как и в случае обычного интерпретатора Lua, поскольку LuaJIT совместим с ним по запросу.

Но вы не можете использовать FFI, потому что FFI основан на синтаксическом анализе заголовочных файлов на основе C. И вы используете синтаксис C++. FFI - не единственный способ использовать LuaJIT; это только тот, который основан на C.

Любой из специфичных для C++ API-интерфейсов связывания, использующих Lua (Luabind, SWIG и т. Д.), Должен прекрасно работать и с LuaJIT.

Можно использовать другое искажение имен, отличное от C. Причина, по которой он не является "распространенным", заключается в том, что искажение имен в C++ очень специфично для компилятора / платформы: http://lua-users.org/lists/lua-l/2011-07/msg00502.html

Так что объявление такого рода действительно:

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

И тогда вы можете вызвать Test1_Method1. Майк Палл проделал потрясающую работу с luajit. Так много замечательных возможностей.

Другие вопросы по тегам