这里就不再贴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}}

 

 

 

 

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐