微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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=%d\n", 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> 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐