为了账号安全,请及时绑定邮箱和手机立即绑定

c++怎么得到lua传进来的数组(数组的大小不确定,不能以字符串形式压入栈)

c++怎么得到lua传进来的数组(数组的大小不确定,不能以字符串形式压入栈)

C++
一只名叫tom的猫 2019-04-11 10:06:16
比如: lua里面是:add = {1,2,3,4,5,6....N}add.a={1,2}add.b={3,4}add.c={5,6}让c++能完整的得到整个表的值,并保存在一个数组里,但是add的长度不能确定,
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

首先我们要看一下我们要存储的对象
存储对象是一个lua的table结构
table结构在lua里可以看作是一种动态的数组
然而在lua里的table和C里的数组差别比较大,我们并不能直接把表简单的传过去,所以我们要把table转化成一个c里可以存储的方式,因此我们需要遍历一下lua里的表
下面是大概的思路 具体的代码你需要自己去写
namelist = {} --这个用来存储遍历后展开的表的索引
valuelist = {} --这个用来存储遍历后展开的每一个值
typelist = {} --用来保存变量的类型

function saveTable(t,parent)
parent = parent or ""
for i,v in pairs(t) do
table.insert(namelist,i.."#"..parent) --将名字存入名字列表
table.insert(typelist,type(v)) --将对应变量的类型存入列表
table.insert(valuelist,v) --将变量存入列表
if type(v) == "table" then
saveTable(v,tostring(i).."#"..parent)
end
end
end

这里就可以将一个完整的表拆成索引 对应值 以及类型 存到3个表里
然后将3个表 传给C,然后再由C把这个表重新组装起来
测试的话 这样

test = {1,2,3,4,{5,6,7},{{8},9}}
saveTable(test)
for i,v in pairs(namelist) do
print(v)
end
for i,v in pairs(valuelist) do
print(v)
end
for i,v in pairs(typelist) do
print(v)
end
就可以看到3个表的内部结构,然后C的话 只要通过类型判断处理方法,是表的话就再建个数组
然后索引按照namelist里进行按层拆分就可以获得了



查看完整回答
反对 回复 2019-04-12
  • 2 回答
  • 0 关注
  • 1230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信