lua_tinker学习笔记(2)

这里就不再贴sample的源代码了,只分析lua_tinker的函数

static int cpp_int=100;

lua_tinker::set(L,"cpp_int",cpp_int);//在lua中注册C++变量

// global variable
 template<typename T>
 void set(lua_State* L, const char* name, T object)//在lua中注册C++变量
 {
  lua_pushstring(L, name);//变量名入栈(cpp_int)
  push(L, object);//变量值入栈(100)
  lua_settable(L, LUA_GLOBALSINDEX);//将变量放入lua全局表中
 }

lua_tinker::dofile(L, "sample2.lua");//载入*.lua文件
int lua_int = lua_tinker::get<int>(L, "lua_int");//从lua中取文件

template<typename T>
 T get(lua_State* L, const char* name)//从lua中取全局变量
 {
  lua_pushstring(L, name);//变量名入栈(lua_int)
  lua_gettable(L, LUA_GLOBALSINDEX);//再全局表中取(lua_int)的值
  return pop<T>(L);//从栈顶-1处取出值,清栈
 }

 

void class_add(lua_State* L, const char* name)//在lua中注册类

例子lua_tinker::class_add<base>(L, "base");

void class_def(lua_State* L, const char* name, F func)//注册类的函数

例子lua_tinker::class_def<base>(L, "is_base", &base::is_base);

 template<typename T, typename P>
 void class_inh(lua_State* L) //设定类继承的关系

例子

lua_tinker::class_add(L,"base");

lua_tinker::class_def<base>(L,"is_base",&base::is_base);

lua_tinker::class_add(L,"test");

lua_tinker::class_inh<test,base>(L);

 template<typename T, typename BASE, typename VAR>
 void class_mem(lua_State* L, const char* name, VAR BASE::*val)//注册类里的变量

例子

class test

{

     int _test;

};

 lua_tinker::class_mem<test>(L, "_test", &test::_test);

 

// Table Object Holder
 struct table    //处理lua中table结构
 {
  table(lua_State* L);
  table(lua_State* L, int index);
  table(lua_State* L, const char* name);
  table(const table& input);
  ~table();

  template<typename T>
  void set(const char* name, T object)//
  {
   m_obj->set(name, object);
  }

  template<typename T>
  T get(const char* name)
  {
   return m_obj->get<T>(name);
  }

  table_obj*  m_obj;
 };

例子

 lua_tinker::table haha(L, "haha");

 haha.set("value", 1);

 haha.set("inside", lua_tinker::table(L));

 lua_tinker::table inside = haha.get<lua_tinker::table>("inside");

 inside.set("value", 2);

转换成lua的代码意思是

haha={value=1,inside={value=2}}

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值