在LuaJIT FFI库中,结构可以是initialized from tables。有没有一种简单的方法可以做相反的事情?显然,对于任何特定的结构,很容易编写将其转换为表的函数,但它需要重复这些字段。我并不特别关心性能,这只是用于调试。
答案 0 :(得分:4)
您可以使用ffi-reflect Lua库,它使用ffi.typeinfo读取内部ctype信息以获取结构的字段名称列表。
local ffi = require "ffi"
local reflect = require "reflect"
ffi.cdef[[typedef struct test{int x, y;}test;]]
local cd = ffi.new('test', 1, 2)
function totab(struct)
local t = {}
for refct in reflect.typeof(struct):members() do
t[refct.name] = struct[refct.name]
end
return t
end
local ret = totab(cd)
assert(ret.x == 1 and ret.y == 2)