??????4??bug??var_base????????????????дvirtual
????struct var_base
????{
????//????????????????дvirtual
????virtual ~var_base() {};
????virtual void get(lua_State *L) = 0;
????virtual void set(lua_State *L) = 0;
????};
??????5??bug??table??3?????????????????????????ü????????bug???????????????????
lua_tinker::table::table(lua_State* L?? const char* name)
{
lua_pushstring(L?? name);
lua_gettable(L?? LUA_GLOBALSINDEX);
if(lua_istable(L?? -1) == 0)
{
lua_pop(L?? 1);
lua_newtable(L);
lua_pushstring(L?? name);
lua_pushvalue(L?? -2);
lua_settable(L?? LUA_GLOBALSINDEX);
}
m_obj = new table_obj(L?? lua_gettop(L));
//?????????????Σ???????????ü???????
m_obj->inc_ref();
}
???????
????LuaTinker??к?????????
?????????????????????????????????β???LuaTinker??д???????????磬???C++ 11??????Σ?Variadic Template?????????????????д?????溯???????????????????????????LuaTinker?????д???????????????????LuaTinker????????????????????????????????3????4????5??????С???????????C++ 11???Variadic Template????д??
???????????????????LuaTinker??Lua Э????????????????????????????????????????Э????????????????lua_State *L????????????????lua_yield(L?? 0)????????????????????????á?
//???????????????(lua_State *L
int TestFunc2(lua_State *L?? float a)
{
printf("# TestFunc2(L??%f) is invoke. "?? a);
//????????????????lua_yield
return lua_yield(L?? 0);
}
class TestClass
{
public:
//????????
int TestFunc2(lua_State *L?? float a)
{
printf("# TestClass::TestFunc2(L??%f) is invoke. "?? a);
return lua_yield(L?? 0);
}
};
???????????????亯?????????????????????????lua_yield??????????????鷳?????????????????ж??θ???
???????????????????????????????????????????????????????LuaTinker??????????C++????????C++???????溯???????????????Щ??????????????????????任???? ??CUJ????Ч??????????????????????????STL?? ??????б?????????????????????
????//?????д????????????????????????????????
????//lua_tinker::set(L?? "ref_a"?? ref_a);
????//??????????ò???
????lua_tinker::set<TestA &>(L?? "ref_a"?? ref_a);
??????4???????????洦???У?????cv??const volatile?????????????????????Lua???????????class?????????ú???class_add????????????????????Lua??meta table???????????????У????class_name<T>::name???????????????????У???????T?????const ???? volatile?????η??????????LuaTinker???????????????const???????????????????????????????classA??const class A?????????????????????????????????userdata????????meta table??
lua_tinker::class_add<TestA>(L?? "TestA");
lua_tinker::class_con<TestA>(L?? lua_tinker::constructor<TestA>);
//????庯????????????????????????????class ??????????????????LUA?????????
template<typename T>
struct class_name
{
// global name
static const char *name(const char *name = NULL)
{
static char temp[256] = "";
if (name)
{
strcpy_s(temp?? name);
}
return temp;
}
};
????fergzhang???????LuaTinker???Щbug????????????汾?????????????5.2??汾??????????https://github.com/zfengzhen/lua_tinker_5.2.git
???????????????????????????????LuaTie????????????????????????????C++ 11???????????Щ??д??
????https://github.com/sailzeng/zcelib/blob/master/src/commlib/zcelib/zce_script_lua_tie.cpp
????https://github.com/sailzeng/zcelib/blob/master/src/commlib/zcelib/zce_script_lua_tie.h
??????????????в??????????????????????????????????鷳????????????????д??????????°??
?????????????????????????α?????? LuaTinker????Kwon-il Lee???л????????????????????????????????MPL???Щ??????.????????LuaBind???Boost??????????????Щ?????м???LuaTinker?????Boost????????????????????????????????????飬LuaTinker???????????????????????????Kwon-il Lee??????????????????????????LuaBind???????????????????????????????????