分享

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

 quasiceo 2014-01-17
分类: lua 2013-02-19 14:43 701人阅读 评论(0) 收藏 举报

2013年春节过后,愿大家都节日快乐,同时为还活着的程序猿们祈祷,当然死了的也看不到这个文章啦**

先开个小小的玩笑,下面开始正题。

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

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

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

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

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

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

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

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

大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑大笑


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

  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, const char* lpszTableName, int index,int &int_value);  
  14.   
  15.      void ReadTableFromKey_String(lua_State *L, const char* lpszTableName, const char* lpszTableItem,string &string_value);  
  16.      void ReadTableFromIndex_String(lua_State *L, const char* lpszTableName, int index,string &string_value);  
  17.   
  18.      void ReadTableFromKey_Double(lua_State *L, const char* lpszTableName, const char* lpszTableItem,double &double_value);  
  19.      void ReadTableFromIndex_Double(lua_State *L, const char* lpszTableName, int index,double &double_value);  
  20.   
  21.      void ReadTableFromKey_UnsignedLong(lua_State *L, const char* lpszTableName, const char* lpszTableItem,unsigned long &unsigned_long_value);  
  22.      void ReadTableFromIndex_UnsignedLong(lua_State *L, const char* lpszTableName, int index,unsigned long &unsigned_long_value);  
  23.   
  24.      void WriteTableFromKey_Int(lua_State *L, const char* lpszTableName, const char* lpszTableItem, int int_value);  
  25.      void WriteTableFromIndex_Int(lua_State *L, const char* lpszTableName, int index, int int_value);  
  26.   
  27.      void WriteTableFromKey_String(lua_State *L, const char* lpszTableName, const char* lpszTableItem, string string_value);  
  28.      void WriteTableFromIndex_String(lua_State *L, const char* lpszTableName, int index, string string_value);  
  29.   
  30.      void WriteTableFromKey_Double(lua_State *L, const char* lpszTableName, const char* lpszTableItem, double double_value);  
  31.      void WriteTableFromIndex_Double(lua_State *L, const char* lpszTableName, int index, double double_value);  
  32.   
  33.      void WriteTableFromKey_UnsignedLong(lua_State *L, const char* lpszTableName, const char* lpszTableItem, unsigned long unsigned_long_value);  
  34.      void WriteTableFromIndex_UnsignedLong(lua_State *L, const char* lpszTableName, int index, unsigned long unsigned_long_value);  
  35.   
  36.      void GetTableLenth(lua_State *L, const char* lpszTableName,int &length);  
  37. };  
  38.   
  39.   
  40.   
  41. #endif // !READLUAVALUE_H  
  42. </span>  

  1. <span style="font-size:14px;">#include "ReadAndWriteLuaTableValue.h"  
  2.   
  3.   
  4.  void LuaReadTable::ReadTableFromKey_Int(lua_State *L, const char* lpszTableName, const char* lpszTableItem,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, const char* lpszTableName, int index,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, const char* lpszTableName, const char* lpszTableItem,string &string_value)  
  27. {  
  28.     lua_getglobal(L, lpszTableName);  
  29.   
  30.     lua_pushstring(L, lpszTableItem);  
  31.     lua_gettable(L, -2);  
  32.   
  33.     string_value = lua_tostring(L, -1);  
  34.     lua_pop(L, 2);  
  35. }  
  36.   
  37.  void LuaReadTable::ReadTableFromIndex_String(lua_State *L, const char* lpszTableName, int index,string &string_value)  
  38. {  
  39.     lua_getglobal(L, lpszTableName);  
  40.   
  41.     lua_getglobal(L, lpszTableName);  
  42.     lua_rawgeti(L, -1, index);  
  43.   
  44.     string_value = lua_tostring(L, -1);  
  45.     lua_pop(L, 2);  
  46. }  
  47.   
  48.  void LuaReadTable::ReadTableFromKey_Double(lua_State *L, const char* lpszTableName, const char* lpszTableItem,double &double_value)  
  49. {  
  50.     lua_getglobal(L, lpszTableName);  
  51.     lua_pushstring(L, lpszTableItem);  
  52.       
  53.     lua_gettable(L, -2);  
  54.   
  55.     double_value = (double)lua_tonumber(L, -1);  
  56.     lua_pop(L, 2);  
  57. }  
  58.   
  59.  void LuaReadTable::ReadTableFromIndex_Double(lua_State *L, const char* lpszTableName, int index,double &double_value)  
  60. {  
  61.     lua_getglobal(L, lpszTableName);  
  62.       
  63.     lua_rawgeti(L, -1, index);  
  64.   
  65.     double_value = (double)lua_tonumber(L, -1);  
  66.     lua_pop(L, 2);  
  67. }  
  68.   
  69.  void LuaReadTable::ReadTableFromKey_UnsignedLong(lua_State *L, const char* lpszTableName, const char* lpszTableItem,unsigned long &unsigned_long_value)  
  70. {  
  71.     lua_getglobal(L, lpszTableName);  
  72.     lua_pushstring(L, lpszTableItem);  
  73.       
  74.     lua_gettable(L, -2);  
  75.   
  76.     unsigned_long_value = (unsigned long)lua_tonumber(L, -1);  
  77.     lua_pop(L, 2);  
  78. }  
  79.   
  80.   
  81.  void LuaReadTable::ReadTableFromIndex_UnsignedLong(lua_State *L, const char* lpszTableName, int index,unsigned long &unsigned_long_value)  
  82. {  
  83.     lua_getglobal(L, lpszTableName);  
  84.       
  85.     lua_rawgeti(L, -1, index);  
  86.   
  87.     unsigned_long_value = (unsigned long)lua_tonumber(L, -1);  
  88.     lua_pop(L, 2);  
  89. }  
  90.  void LuaReadTable::WriteTableFromKey_Int(lua_State *L, const char* lpszTableName, const char* lpszTableItem, int int_value)  
  91. {  
  92.     lua_getglobal(L, lpszTableName);  
  93.     lua_pushnumber(L, int_value);  
  94.   
  95.     lua_setfield(L, -2, lpszTableItem);  
  96.     lua_pop(L, 1);  
  97. }  
  98.   
  99.  void LuaReadTable::WriteTableFromIndex_Int(lua_State *L, const char* lpszTableName, int index, int int_value)  
  100. {  
  101.     lua_getglobal(L, lpszTableName);  
  102.     lua_pushnumber(L, int_value);  
  103.   
  104.     lua_rawseti(L, -2, index);  
  105.     lua_pop(L, 1);  
  106. }  
  107.   
  108.  void LuaReadTable::WriteTableFromKey_String(lua_State *L, const char* lpszTableName, const char* lpszTableItem, string string_value)  
  109. {  
  110.     lua_getglobal(L, lpszTableName);  
  111.     lua_pushstring(L, string_value.c_str());  
  112.   
  113.     lua_setfield(L, -2, lpszTableItem);  
  114.     lua_pop(L, 1);  
  115. }  
  116.   
  117.  void LuaReadTable::WriteTableFromIndex_String(lua_State *L, const char* lpszTableName, int index, string string_value)  
  118. {  
  119.     lua_getglobal(L, lpszTableName);  
  120.     lua_pushstring(L, string_value.c_str());  
  121.   
  122.     lua_rawseti(L, -2, index);  
  123.     lua_pop(L, 1);  
  124. }  
  125.   
  126.  void LuaReadTable::WriteTableFromKey_Double(lua_State *L, const char* lpszTableName, const char* lpszTableItem, double double_value)  
  127. {  
  128.     lua_getglobal(L, lpszTableName);  
  129.     lua_pushnumber(L, double_value);  
  130.   
  131.     lua_setfield(L, -2, lpszTableItem);  
  132.     lua_pop(L, 1);  
  133. }  
  134.   
  135.  void LuaReadTable::WriteTableFromIndex_Double(lua_State *L, const char* lpszTableName, int index, double double_value)  
  136. {  
  137.     lua_getglobal(L, lpszTableName);  
  138.     lua_pushnumber(L, double_value);  
  139.   
  140.     lua_rawseti(L, -2, index);  
  141.     lua_pop(L, 1);  
  142. }  
  143.   
  144.  void LuaReadTable::WriteTableFromKey_UnsignedLong(lua_State *L, const char* lpszTableName, const char* lpszTableItem, unsigned long unsigned_long_value)  
  145. {  
  146.     lua_getglobal(L, lpszTableName);  
  147.     lua_pushnumber(L, unsigned_long_value);  
  148.   
  149.     lua_setfield(L, -2, lpszTableItem);  
  150.     lua_pop(L, 1);  
  151. }  
  152.   
  153. void LuaReadTable::WriteTableFromIndex_UnsignedLong(lua_State *L, const char* lpszTableName, int index, unsigned long unsigned_long_value)  
  154. {  
  155.     lua_getglobal(L, lpszTableName);  
  156.     lua_pushnumber(L, unsigned_long_value);  
  157.   
  158.     lua_rawseti(L, -2, index);  
  159.     lua_pop(L, 1);  
  160. }  
  161.   
  162. void LuaReadTable::GetTableLenth(lua_State *L, const char* lpszTableName,int &length)  
  163. {  
  164.     lua_getglobal(L, lpszTableName);  
  165.     length=lua_rawlen(L,-1);  
  166.     lua_pop(L, 1);  
  167. }</span>  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多