Lua调用C++类

本文介绍了如何通过Lua调用C++类,利用自定义类型userdata和元表来实现。首先,讲解了lua_newuserdata、luaL_newmetatable等关键函数的用途。接着,通过创建Student类的示例,展示了如何在C++中注册lua函数并设置元表,以实现Lua中的面向对象调用。最后,通过修改元表,实现了Lua中对象的自动内存管理,确保了C++对象的正确析构。
摘要由CSDN通过智能技术生成


Lua调用C++

   Lua调用C++主要使用自定义类型userdata。通过创建对象指针与自定义类型关联,并利用元表校验指针以及实现面向对象语法。本文使用了以前编译的Lua静态库

一、Lua访问C++
1.介绍几个函数:

   void *lua_newuserdata (lua_State *L, size_tsize);

   int luaL_newmetatable (lua_State *L, constchar *tname);

   void luaL_getmetatable (lua_State *L, constchar *tname);

   void *luaL_checkudata (lua_State *L, intindex, const char *tname);

lua_newuserdata函数按照指定的大小分配一块内存,将对应的userdata放到栈内,并返回内存块的地址。你可以申请一块内存,也可以只申请指针大小的内存,再将该指针指向另一块区域。lua_newuserdata申请的内存由Lua自己释放

luaL_newmetatable函数创建一个新表(将用作metatable),将新表放到栈顶并建立表和registry中类型名的联系。

luaL_getmetatable函数获取registry中的tname对应的metatable

luaL_checkudata检查在栈中指定位置的对象是否为带有给定名字的metatableusertatum。如果对象不存在正确的metatable,返回NULL(或者它不是一个userdata);否则,返回userdata的地址。

2.自定义C++

1.vs2012中新建一个项目Studenet,并导入Lua的所有头文件

2.新建Student.hStudent.cpp文件输入:

//

student.h

/

#ifndef __MyCppGame__Student__

#define __MyCppGame__Student__

#include <iostream>

#include <string>

using namespace std;

class Student

{

public:

      Student();

      ~Student();

      string getName();

      void setName(string name);

private:

      string name;

};

 

#endif/*defined(__MyCppGame__Student__) */

//

student.cpp

/

extern"C"

{

#include "Lua/lua.h"

#include "Lua/lauxlib.h"

#include "Lua/lualib.h"

#include <stdio.h>

}

#include "Student.h"

#pragma comment(lib,"LuaTest.lib")

Student::Student()

{

      name =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值