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

来源:互联网 发布:anaconda ubuntu 16.04 编辑:程序博客网 时间:2024/05/16 17:10

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

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

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

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

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

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

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

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

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


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

[plain] view plaincopy
  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>  

[plain] view plaincopy
  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>  

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 支票被背书人的章盖浅了怎么办 没病装病的心理病患者怎么办 20多岁被骗40多万怎么办 一个学生上课爱捣乱班级课堂怎么办 军训的时候大姨妈来了怎么办 笔记本连接无线网说链接限制怎么办 12306密码和邮箱都忘了怎么办 烦恼都是自找的新书散页了怎么办 白色衣服被红色衣服染了怎么办 手机微信里面不能拍手功怎么办 肇事逃逸轻伤且对方不私了怎么办 数学差怎么办脑子不好啊数学学不老 手机号丢失微信密码丢失怎么办找回 悦借钱输入五次密码被锁怎么办 生源地助学贷款密码忘了怎么办 生源地助学贷款登录密码忘了怎么办 助学贷款支付宝密码忘了怎么办 微信密码忘记了手机号也换了怎么办 换手机号了微信密码忘记了怎么办 qq密码忘记了手机号也换了怎么办 一年只能修改一次昵称我能怎么办 华为手机的账号和密码丢失怎么办 华为手机的账号和密码丢失了怎么办 手机号被别人注册了微博怎么办 微博账号一天内多次解冻怎么办 露娜注册时邮箱填错了怎么办 苹果4s手机显示已停用怎么办 新买的微博小号太多内容了怎么办 向海关申报价格低于实际价格怎么办 百度云下载内容包含违规信息怎么办 跨境汇款错了不能退款怎么办 公司欠钱没有还被起诉了。怎么办 战网的姓名不是身份证名字怎么办 手机号码被别人注册了微信怎么办 手机号码被别人注册过微信怎么办 手机号码换了微信密码忘了怎么办 手机号码停了微信密码忘了怎么办 微信好友发的视频删了怎么办 随机生成的微信号搜索不到怎么办 支付宝账户登录密码忘记了怎么办 淘宝支付宝登录密码忘记了怎么办