tolua中的peer表简单总结

以下的内容均以tolua与c++的交互为例进行说明(tolua与其他语言的交互原理相通)

一、理一下peer表的作用

我们知道lua与其他语言的交互均以表的操作为基础。假如现在lua中有一个已创建好的c++对象c++_obj,我们现在想在lua中对c++_obj进行扩展,具体的扩展细节暂时不考虑,我们只要考虑我们想要扩展的内容放到哪里比较合适。放到c++_obj对应的metatable中显然不太合适,因为metatable中的内容是所有对象都具备的,而我们现在想扩展的内容是c++_obj这个对象独有的。为了解决这个问题,lua中引入了一个专门的表来存放我们在lua中对其他语言的对象的扩展内容,这个表在tolua中就叫做peer表。c++_obj的metatable的__index指向一个c函数,当访问c++_obj中的一个域的时候,会调用这个c函数,这个c函数会去查找各个关联表,来取得我们要访问的域,这其中就包括对peer表的查询。

二、c++对象在lua层的扩展

1、lua5.1中的操作---tolua.setpeer和tolua.getpeer(这两个方法用来是对peer表进行操作的)

a> tolua.setpeer的用法

tolua.setpeer(c++_obj,lua_table),将lua_table设置为c++_obj的peer表。此后,在对应c++_obj进行访问的时候,会先去peer表中查询,然后再去对应的metatable中查询。

b> tolua.getpeer的用法

tolua_getpeer(c++_obj)取得c++_obj的peer表

2、lua5.1之前的操作---userdata+集合的形式(因为没有以上两个方法)

在注册表中设置一个表(tolua_peer),这个表以userdata为key,以我们要扩展的内容为集合。在对c++_obj进行get/set的时候,会先取得userdate对应的集合,然后再去集合中取得对应的域。

 

转载于:https://www.cnblogs.com/luguoshuai/p/11193690.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值