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

Lua做为c++程序的配置文件

发布时间:2020-12-14 22:17:06 所属栏目:大数据 来源:网络整理
导读:Lua做为c++程序的配置文件 介绍下Lua做为c++程序的配置文件的用法 大家可能习惯了用xml作为配置文件,其实很多时候我们也可以使用脚本作为程序的配置文件,这样程序既可以添加入脚本 又可以使用配置文件,作为一种脚本语言做配置文件自然可以,用lua的好处有

Lua做为c++程序的配置文件

介绍下Lua做为c++程序的配置文件的用法

大家可能习惯了用xml作为配置文件,其实很多时候我们也可以使用脚本作为程序的配置文件,这样程序既可以添加入脚本

又可以使用配置文件,作为一种脚本语言做配置文件自然可以,用lua的好处有几个方面,

1.是它天生和c++程序结合非常好。

2.这样可以减少整个工程的编译次数(所有配置文件共同的好处)

3.容易进行跨平台的移植

4.lua的解释器非常小,不会使整个工程的体积变得臃肿

最常用的方式就是将要配置的东西放入table中。下面的代码是从table中读取数据的方法!如果有更好的可以提供出来一起分享一下!


最后附上读取配置文件的常用源代码:

[plain] view plain copy
  1. <span?style="font-size:14px;">#ifndef?READLUAVALUE_H??
  2. #define?READLUAVALUE_H??
  3. #include?<string>??
  4. #include?<lua.hpp>??
  5. using?namespace?std;??
  6. ??
  7. class?LuaReadTable??
  8. {??
  9. public:??
  10. ????LuaReadTable(){}??
  11. ????~LuaReadTable(){}??
  12. ?????void?ReadTableFromKey_Int(lua_State?*L,?const?char*?lpszTableName,?const?char*?lpszTableItem,int?&int_value);??
  13. ?????void?ReadTableFromIndex_Int(lua_State?*L,?int?index,int?&int_value);??
  14. ??
  15. ?????void?ReadTableFromKey_String(lua_State?*L,string?&string_value);??
  16. ?????void?ReadTableFromIndex_String(lua_State?*L,string?&string_value);??
  17. ??
  18. ?????void?ReadTableFromKey_Double(lua_State?*L,double?&double_value);??
  19. ?????void?ReadTableFromIndex_Double(lua_State?*L,double?&double_value);??
  20. ??
  21. ?????void?ReadTableFromKey_UnsignedLong(lua_State?*L,unsigned?long?&unsigned_long_value);??
  22. ?????void?ReadTableFromIndex_UnsignedLong(lua_State?*L,unsigned?long?&unsigned_long_value);??
  23. ??
  24. ?????void?WriteTableFromKey_Int(lua_State?*L,?int?int_value);??
  25. ?????void?WriteTableFromIndex_Int(lua_State?*L,?int?int_value);??
  26. ??
  27. ?????void?WriteTableFromKey_String(lua_State?*L,?string?string_value);??
  28. ?????void?WriteTableFromIndex_String(lua_State?*L,?string?string_value);??
  29. ??
  30. ?????void?WriteTableFromKey_Double(lua_State?*L,?double?double_value);??
  31. ?????void?WriteTableFromIndex_Double(lua_State?*L,?double?double_value);??
  32. ??
  33. ?????void?WriteTableFromKey_UnsignedLong(lua_State?*L,?unsigned?long?unsigned_long_value);??
  34. ?????void?WriteTableFromIndex_UnsignedLong(lua_State?*L,?unsigned?long?unsigned_long_value);??
  35. ??
  36. ?????void?GetTableLenth(lua_State?*L,int?&length);??
  37. };??
  38. ??
  39. ??
  40. ??
  41. #endif?//?!READLUAVALUE_H??
  42. </span>??

[plain] view plain copy
  1. <span?style="font-size:14px;">#include?"ReadAndWriteLuaTableValue.h"??
  2. ??
  3. ??
  4. ?void?LuaReadTable::ReadTableFromKey_Int(lua_State?*L,int?&int_value)??
  5. {??
  6. ????lua_getglobal(L,?lpszTableName);??
  7. ??
  8. ????lua_pushstring(L,?lpszTableItem);??
  9. ????lua_gettable(L,?-2);??
  10. ??????
  11. ????//printf("%s.%s=%dn",?lpszTableName,?lpszTableItem,?(int)lua_tonumber(L,?-1));??
  12. ??????
  13. ????int_value?=?(int)lua_tonumber(L,?-1);??
  14. ????lua_pop(L,?2);??
  15. }??
  16. ??
  17. ?void?LuaReadTable::ReadTableFromIndex_Int(lua_State?*L,int?&int_value)??
  18. {??
  19. ????lua_getglobal(L,?lpszTableName);??
  20. ????lua_rawgeti(L,?-1,?index);??
  21. ??????
  22. ????int_value?=?(int)lua_tonumber(L,?-1);??
  23. ????lua_pop(L,?2);??
  24. }??
  25. ??
  26. ?void?LuaReadTable::ReadTableFromKey_String(lua_State?*L,string?&string_value)??
  27. {??
  28. ????lua_getglobal(L,?-2);??
  29. ??
  30. ????string_value?=?lua_tostring(L,?2);??
  31. }??
  32. ??
  33. ?void?LuaReadTable::ReadTableFromIndex_String(lua_State?*L,string?&string_value)??
  34. {??
  35. ????lua_getglobal(L,?lpszTableName);??
  36. ??
  37. ????lua_getglobal(L,?index);??
  38. ??
  39. ????string_value?=?lua_tostring(L,?2);??
  40. }??
  41. ??
  42. ?void?LuaReadTable::ReadTableFromKey_Double(lua_State?*L,double?&double_value)??
  43. {??
  44. ????lua_getglobal(L,?lpszTableName);??
  45. ????lua_pushstring(L,?lpszTableItem);??
  46. ??????
  47. ????lua_gettable(L,?-2);??
  48. ??
  49. ????double_value?=?(double)lua_tonumber(L,?2);??
  50. }??
  51. ??
  52. ?void?LuaReadTable::ReadTableFromIndex_Double(lua_State?*L,double?&double_value)??
  53. {??
  54. ????lua_getglobal(L,?lpszTableName);??
  55. ??????
  56. ????lua_rawgeti(L,?index);??
  57. ??
  58. ????double_value?=?(double)lua_tonumber(L,?2);??
  59. }??
  60. ??
  61. ?void?LuaReadTable::ReadTableFromKey_UnsignedLong(lua_State?*L,unsigned?long?&unsigned_long_value)??
  62. {??
  63. ????lua_getglobal(L,?lpszTableName);??
  64. ????lua_pushstring(L,?lpszTableItem);??
  65. ??????
  66. ????lua_gettable(L,?-2);??
  67. ??
  68. ????unsigned_long_value?=?(unsigned?long)lua_tonumber(L,?2);??
  69. }??
  70. ??
  71. ??
  72. ?void?LuaReadTable::ReadTableFromIndex_UnsignedLong(lua_State?*L,?index);??
  73. ??
  74. ????unsigned_long_value?=?(unsigned?long)lua_tonumber(L,?2);??
  75. }??
  76. ?void?LuaReadTable::WriteTableFromKey_Int(lua_State?*L,?int?int_value)??
  77. {??
  78. ????lua_getglobal(L,?lpszTableName);??
  79. ????lua_pushnumber(L,?int_value);??
  80. ??
  81. ????lua_setfield(L,?-2,?lpszTableItem);??
  82. ????lua_pop(L,?1);??
  83. }??
  84. ??
  85. ?void?LuaReadTable::WriteTableFromIndex_Int(lua_State?*L,?int?int_value)??
  86. {??
  87. ????lua_getglobal(L,?lpszTableName);??
  88. ????lua_pushnumber(L,?int_value);??
  89. ??
  90. ????lua_rawseti(L,?index);??
  91. ????lua_pop(L,?1);??
  92. }??
  93. ??
  94. ?void?LuaReadTable::WriteTableFromKey_String(lua_State?*L,?string?string_value)??
  95. {??
  96. ????lua_getglobal(L,?string_value.c_str());??
  97. ??
  98. ????lua_setfield(L,?1);??
  99. }??
  100. ??
  101. ?void?LuaReadTable::WriteTableFromIndex_String(lua_State?*L,?string?string_value)??
  102. {??
  103. ????lua_getglobal(L,?string_value.c_str());??
  104. ??
  105. ????lua_rawseti(L,?1);??
  106. }??
  107. ??
  108. ?void?LuaReadTable::WriteTableFromKey_Double(lua_State?*L,?double?double_value)??
  109. {??
  110. ????lua_getglobal(L,?double_value);??
  111. ??
  112. ????lua_setfield(L,?1);??
  113. }??
  114. ??
  115. ?void?LuaReadTable::WriteTableFromIndex_Double(lua_State?*L,?double?double_value)??
  116. {??
  117. ????lua_getglobal(L,?double_value);??
  118. ??
  119. ????lua_rawseti(L,?1);??
  120. }??
  121. ??
  122. ?void?LuaReadTable::WriteTableFromKey_UnsignedLong(lua_State?*L,?unsigned?long?unsigned_long_value)??
  123. {??
  124. ????lua_getglobal(L,?unsigned_long_value);??
  125. ??
  126. ????lua_setfield(L,?1);??
  127. }??
  128. ??
  129. void?LuaReadTable::WriteTableFromIndex_UnsignedLong(lua_State?*L,?unsigned?long?unsigned_long_value)??
  130. {??
  131. ????lua_getglobal(L,?unsigned_long_value);??
  132. ??
  133. ????lua_rawseti(L,?1);??
  134. }??
  135. ??
  136. void?LuaReadTable::GetTableLenth(lua_State?*L,int?&length)??
  137. {??
  138. ????lua_getglobal(L,?lpszTableName);??
  139. ????length=lua_rawlen(L,-1);??
  140. ????lua_pop(L,?1);??
  141. }</span>?

(编辑:李大同)

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

    推荐文章
      热点阅读