亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1246 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號