加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua: 在C++中将table如何传入到lua中

发布时间:2020-12-14 21:52:41 所属栏目:大数据 来源:网络整理
导读:[cpp] ? view plain ?copy 例一是参考别人的:?? copy //定义函数(返回table) ?? int ?func_return_table(lua_State?*L)?? {?? ?lua_newtable(L); //创建一个表格,放在栈顶 ?? ?lua_pushstring(L,? "mydata" ); //压入key ?? ?lua_pushnumber(L,66); //压入
[cpp]? view plain ?copy
  1. 例一是参考别人的:??

输出结构体:

这里算是一个嵌套的结构体了。

函数解释:

就是把表在lua堆栈中的值弹出来,index 是table 在堆栈中的位置,假如 table 在 -3,则key 应该是 -2,value 是 -1

相当于 table[key] = value.

例二:

在工作中这里我想用一个类似数组的table,类似 tableaname[n].x

代码:

copy
    static?int?luaGetBattleResultData(lua_State?*L_)??
  1. ????lua_newtable(L_);?//创建一个表,放在栈顶??
  2. ????int?i?=?1;?//目的:类似tablename[i].id??
  3. ????std::map<unsigned,?BattleResultDamageData>::const_iterator?map_it;??
  4. ????for?(map_it?=?SkillActObj::_BattleAtk.begin();?map_it?!=?SkillActObj::_BattleAtk.end();?++map_it,++i)?//可忽略,目的遍历C++中的数据放在lua的table??
  5. ????{??
  6. ????????lua_pushnumber(L_,i);??
  7. ????????lua_newtable(L_);??
  8. ????????lua_pushstring(L_,"id");??
  9. ????????lua_pushnumber(L_,map_it->first);??
  10. ????????lua_settable(L_,value,并设置到table里面去??
  11. ????????lua_pushstring(L_,"dmg");??
  12. ????????lua_settable(L_,-3);??
  13. "icon");??
  14. "lv");??
  15. "star");??
  16. "evo");??
  17. "pos");??
  18. "skin");??
  19. ????}??
  20. ????????return?1;??
  21. 在lua代码中的使用:

    copy

    local?buffAtk?=?_G.getBattleResultData();??

打印的buffAtk这个table结构体信息:

copy

    <Info>0409-210505?654?Lookup?local?var?buffAtk??
  1. <Info>0409-210505?654?name?=?buffAtk???type?=?table????value?=?0CB685A0??
  2. <Info>0409-210505?654?name?=?buffAtk[1]????type?=?table????value?=?06CCEA58??
  3. <Info>0409-210505?670?name?=?buffAtk[1][dmg]???type?=?number???value?=?89298??
  4. <Info>0409-210505?670?name?=?buffAtk[1][skin]??type?=?number???value?=?0??
  5. <Info>0409-210505?670?name?=?buffAtk[1][star]??type?=?number???value?=?6??
  6. <Info>0409-210505?689?name?=?buffAtk[1][evo]???type?=?number???value?=?10??
  7. <Info>0409-210505?692?name?=?buffAtk[1][id]????type?=?number???value?=?25165827??
  8. <Info>0409-210505?693?name?=?buffAtk[1][lv]????type?=?number???value?=?131??
  9. <Info>0409-210505?693?name?=?buffAtk[1][icon]??type?=?number???value?=?1090??
  10. <Info>0409-210505?693?name?=?buffAtk[1][pos]???type?=?number???value?=?19??
  11. <Info>0409-210505?693?name?=?buffAtk[2]????type?=?table????value?=?0CC8C038??
  12. <Info>0409-210505?693?name?=?buffAtk[2][dmg]???type?=?number???value?=?28726??
  13. <Info>0409-210505?693?name?=?buffAtk[2][skin]??type?=?number???value?=?0??
  14. <Info>0409-210505?710?name?=?buffAtk[2][star]??type?=?number???value?=?6??
  15. <Info>0409-210505?711?name?=?buffAtk[2][evo]???type?=?number???value?=?12??
  16. <Info>0409-210505?711?name?=?buffAtk[2][id]????type?=?number???value?=?25165828??
  17. <Info>0409-210505?711?name?=?buffAtk[2][lv]????type?=?number???value?=?90??
  18. <Info>0409-210505?711?name?=?buffAtk[2][icon]??type?=?number???value?=?1325??
  19. <Info>0409-210505?711?name?=?buffAtk[2][pos]???type?=?number???value?=?51??
例三:

在lua中调用:

打印这两个table的信息:

copy

    <Info>0409-212740?450?Lookup?local?var?buffDef??
  1. <Info>0409-212740?451?name?=?buffDef???type?=?table????value?=?0CDD1EB8??
  2. <Info>0409-212740?451?name?=?buffDef[1]????type?=?table????value?=?0CEEFCA8??
  3. <Info>0409-212740?451?name?=?buffDef[1][dmg]???type?=?number???value?=?1992??
  4. <Info>0409-212740?451?name?=?buffDef[1][skin]??type?=?number???value?=?0??
  5. <Info>0409-212740?466?name?=?buffDef[1][star]??type?=?number???value?=?1??
  6. <Info>0409-212740?466?name?=?buffDef[1][evo]???type?=?number???value?=?4??
  7. <Info>0409-212740?466?name?=?buffDef[1][id]????type?=?number???value?=?25165829??
  8. <Info>0409-212740?482?name?=?buffDef[1][lv]????type?=?number???value?=?85??
  9. <Info>0409-212740?482?name?=?buffDef[1][icon]??type?=?number???value?=?1005??
  10. <Info>0409-212740?482?name?=?buffDef[1][pos]???type?=?number???value?=?2??
  11. <Info>0409-212740?482?name?=?buffDef[2]????type?=?table????value?=?0CEED4D0??
  12. <Info>0409-212740?482?name?=?buffDef[2][dmg]???type?=?number???value?=?2941??
  13. <Info>0409-212740?482?name?=?buffDef[2][skin]??type?=?number???value?=?0??
  14. <Info>0409-212740?499?name?=?buffDef[2][star]??type?=?number???value?=?2??
  15. <Info>0409-212740?499?name?=?buffDef[2][evo]???type?=?number???value?=?6??
  16. <Info>0409-212740?499?name?=?buffDef[2][id]????type?=?number???value?=?25165830??
  17. <Info>0409-212740?499?name?=?buffDef[2][lv]????type?=?number???value?=?85??
  18. <Info>0409-212740?499?name?=?buffDef[2][icon]??type?=?number???value?=?1075??
  19. <Info>0409-212740?499?name?=?buffDef[2][pos]???type?=?number???value?=?16??
  20. <Info>0409-212740?499?name?=?buffDef[3]????type?=?table????value?=?0D0E83A0??
  21. <Info>0409-212740?516?name?=?buffDef[3][dmg]???type?=?number???value?=?308??
  22. <Info>0409-212740?519?name?=?buffDef[3][skin]??type?=?number???value?=?1??
  23. <Info>0409-212740?521?name?=?buffDef[3][star]??type?=?number???value?=?0??
  24. <Info>0409-212740?523?name?=?buffDef[3][evo]???type?=?number???value?=?6??
  25. <Info>0409-212740?523?name?=?buffDef[3][id]????type?=?number???value?=?25165831??
  26. <Info>0409-212740?523?name?=?buffDef[3][lv]????type?=?number???value?=?85??
  27. <Info>0409-212740?523?name?=?buffDef[3][icon]??type?=?number???value?=?1080??
  28. <Info>0409-212740?523?name?=?buffDef[3][pos]???type?=?number???value?=?17??
  29. <Info>0409-212740?523?name?=?buffDef[4]????type?=?table????value?=?0CD85A00??
  30. <Info>0409-212740?523?name?=?buffDef[4][dmg]???type?=?number???value?=?792??
  31. <Info>0409-212740?539?name?=?buffDef[4][skin]??type?=?number???value?=?0??
  32. <Info>0409-212740?539?name?=?buffDef[4][star]??type?=?number???value?=?0??
  33. <Info>0409-212740?539?name?=?buffDef[4][evo]???type?=?number???value?=?0??
  34. <Info>0409-212740?539?name?=?buffDef[4][id]????type?=?number???value?=?25165832??
  35. <Info>0409-212740?539?name?=?buffDef[4][lv]????type?=?number???value?=?85??
  36. <Info>0409-212740?539?name?=?buffDef[4][icon]??type?=?number???value?=?1145??
  37. <Info>0409-212740?539?name?=?buffDef[4][pos]???type?=?number???value?=?30??
  38. <Info>0409-212740?554?name?=?buffDef[5]????type?=?table????value?=?0C7CF7F8??
  39. <Info>0409-212740?554?name?=?buffDef[5][dmg]???type?=?number???value?=?1608??
  40. <Info>0409-212740?554?name?=?buffDef[5][skin]??type?=?number???value?=?0??
  41. <Info>0409-212740?554?name?=?buffDef[5][star]??type?=?number???value?=?2??
  42. <Info>0409-212740?554?name?=?buffDef[5][evo]???type?=?number???value?=?4??
  43. <Info>0409-212740?554?name?=?buffDef[5][id]????type?=?number???value?=?25165833??
  44. <Info>0409-212740?571?name?=?buffDef[5][lv]????type?=?number???value?=?47??
  45. <Info>0409-212740?574?name?=?buffDef[5][icon]??type?=?number???value?=?1090??
  46. <Info>0409-212740?577?name?=?buffDef[5][pos]???type?=?number???value?=?19??
  47. <Info>0409-212740?578???

看到这,是不是感觉哪里不对?是不是感觉代码好臃肿?

下面是最最终优化后的代码:

这下是不是感觉一下子少了好多?这就是代码的重用性!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读