将 LuaJIT FFI 结构转换为表格

在 LuaJIT FFI 库中,结构体可以从表格中初始化](http://luajit.org/ext_ffi_semantics.html#init_table)。但是,有没有一种简单的方法来实现相反的情况?显然,对于任何 特定 的结构体,编写一个将其转换为表格的函数很容易,但这需要重复字段。我并不特别关心性能,这只是用于调试的。

点赞
用户1869589
用户1869589

你可以使用 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)
2016-04-15 14:29:27