Lua操作C语言用户自定义类型数据Userdata I

前面的文章分享了通过Lua操作整数、浮点数、字符串、布尔型、表等数据结构,使用起来非常方便,如果可以通过Lua操作用户自定义的数据类型,那么就可以极大扩展脚本的能力,可以在不改变系统核心模块的基础上(即无需修改核心代码,无需编译已上线系统),丰富系统的功能。

Lua的C API已经为我们开放了这样的接口,即用户数据Userdata。userdata可以用来存储任何类型的数据,而没有预定义的操作,对数据的操作需要用户自定义。

函数lua_newuserdata()用来分配一块指定大小的内存区域,然后将相应的用户数据压栈,并返回这块内存的地址,函数定义如下:

void *lua_newuserdata(lua_State *L, size_t size)

下面我们通过一个简单的demo,来演示如何通过lua操作C语言的用户自定义数据。

定义一个数据结构Staff,成员包含姓名和工号:

struct Staff
{
	char* name;
	int number;
};

定义操作该结构体的函数,分别为创建一个Staff,设置姓名、查询姓名、设置工号、查询工号:

extern "C" int lua_create_new_staff(lua_State *L)
{
	/* 通过lua_newuserdata来创建一块存储Staff结构体的内存 */
    int nbytes = sizeof(struct Staff);
	cout << "Structure Staff size: " << nbytes
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值