我正在 C++ 引擎和 Lua 之间制作一个包装器,我使用的是 LuaJIT,因此我使用 ffi 作为这两者之间的“包装器”,因为引擎有很多不同的部分,我认为它会很好将它们分成文件然后需要它们,但是,在阅读了一些关于 LuaJIT 的内容后,我发现对于外部库,您必须加载库,所以我提出了这个:何时何地我应该加载库?在“胶水”代码(统一所有模块的代码)中?在每个人中?还是将其保存为单个文件会更好?另外,为了决定这个加载库有多慢?
问问题
2985 次
1 回答
3
您可以创建一个加载库的“核心”模块:engine/core.lua
local ffi = require'ffi'
local C = ffi.load('engine') -- loads .so/.dll
ffi.cdef[[
/* put common function/type definitions here. */
]]
-- return native module handle
return C
然后为每个引擎部件创建一个模块:engine/graphics.lua
local ffi = require'ffi' -- still need to load ffi here.
local C = require'engine.core'
-- load other dependent parts.
-- If this module uses types from other parts of the engine they most
-- be defined/loaded here before the call to the ffi.cdef below.
require'engine.types'
ffi.cdef[[
/* define function/types for this part of the engine here. */
]]
local _M = {}
-- Add glue functions to _M module.
function _M.glue_function()
return C.engine_function()
end
return _M
“engine.core”模块中的代码只会被执行一次。将引擎分成多个部分的最大问题是处理跨类型依赖。为了解决这个添加'typedef struct name name;' 用于多个部分的类型的“engine.core”模块。
于 2013-05-20T23:31:42.677 回答