Lua使用C++中的类——调用类方法并访问类变量
Lua使用C++中的类——调用类方法并访问类变量 c.m_x = 1 print("c.Add(4,5) ==> " .. c:Add(4,5));
LuaUseClass.cpp
luaL_getmetatable(L,"CTest"); lua_setmetatable(L,-2); return 1; } static int DestoryCTest(lua_State* L) { // 释放对象 delete *(CTest**)lua_topointer(L,1); return 0; static int CallAdd(lua_State* L) // 调用C++类方法的跳板函数。 CTest* pT = *(CTest**)lua_topointer(L,68); font-family:Simsun; font-size:14px; line-height:23.796875px">lua_pushnumber(L,pT->Add(lua_tonumber(L,2),lua_tonumber(L,3))); static int lua_index(lua_State* L) if (strcmp(lua_tostring(L,"m_x") == 0) else if (strcmp(lua_tostring(L,"Add") == 0) lua_pushcfunction(L,CallAdd); else static int lua_newindex(lua_State* L) pT->m_x = (int)lua_tonumber(L,3); int main(int argc,char * argv[]) lua_State *L = lua_open(); luaopen_base(L);? // 往lua中注册类 lua_setglobal(L,68); font-family:Simsun; font-size:14px; line-height:23.796875px">luaL_newmetatable(L,"CTest"); // 创建一个元表 lua_pushstring(L,"__gc"); // 垃圾回收 lua_settable(L,-3); // 公共函数调用的实现就在此啊 lua_pop(L,68); font-family:Simsun; font-size:14px; line-height:23.796875px">luaL_dofile(L,"LuaUseClass.lua");? lua_close(L); makefile 测试环境 OS:Ubuntu 11.04 Lua:5.1.4 运行结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |