Можно ли использовать функции из пространств имен c ++ с luajit ffi? - PullRequest
4 голосов
/ 14 июля 2011

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

Ответы [ 2 ]

8 голосов
/ 14 июля 2011

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

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

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

2 голосов
/ 27 октября 2014

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

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

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

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

...