加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua使用C++中的类——调用类方法并访问类变量

发布时间:2020-12-14 22:12:51 所属栏目:大数据 来源:网络整理
导读:Lua使用C++中的类——调用类方法并访问类变量 xxNull 2013-04-18 11:21 print("c.m_x == " .. c.m_x); c.m_x = 1 print("c.Add(4,5) == " .. c:Add(4,5)); LuaUseClass.cpp #include lua.hpp#include stdio.h#include stdlib.h#include string.hclass CTest{

Lua使用C++中的类——调用类方法并访问类变量
xxNull 2013-04-18 11:21

print("c.m_x ==> " .. c.m_x);
c.m_x = 1
print("c.Add(4,5) ==> " .. c:Add(4,5));
LuaUseClass.cpp

#include <lua.hpp> #include <stdio.h> #include <stdlib.h> #include <string.h> class CTest { public: CTest() { m_x = 1234; }; virtual ~CTest(){}; int Add(int x,int y) { return x + y; }; int m_x; }; static int CreateCTest(lua_State* L) { // 创建一个元表为CTest的Table——Lua对象 CTest** pData = (CTest**)lua_newuserdata(L,sizeof(CTest*));

*pData = new CTest();
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

CPPFLAG=`pkg-config --cflags lua5.1` LDFLAG=`pkg-config --libs lua5.1` CC=g++ all: LuaUseClass LuaUseClass : LuaUseClass.cpp $(CC) -o $@ $(CPPFLAG) $(LDFLAG) $<

测试环境
OS:Ubuntu 11.04
Lua:5.1.4

运行结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读