lua_tinker学习笔记(2)
这里就不再贴sample的源代码了,只分析lua_tinker的函数static int cpp_int=100;lua_tinker::set(L,"cpp_int",cpp_int);//在lua中注册C++变量// global variable template void set(lua_State* L, const char* name, T object)//在l
这里就不再贴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)