1:tolua_super
tolua_super存在于注册表中,其中记录了各种类型的父类,key是类型的table,value是也是个<v_key,v_value>的表,v_key是父类的名字,value是1。在判断类型的时候,这个非常有用。
2:tolua_ubox
在注册表中和每种类型的表中都存在这样一张表,注册表是在toluafix_open 中初始化的,而每种类型的tolua_ubox表示在该注册该类型的时候初始化的,请参考setbox函数,它要么是父类的tolua_ubox表,要么是重新创建一个新的弱值表,其中记录了ptr-->userdata,每当生成一个C++对象的时候,会生成一个lua层面的userdata,当下次压入时且类型是当前类型的子类,那么会去更新userdata的metatable为子类表
3:TOLUA_REFID_PTR_MAPPING,TOLUA_REFID_TYPE_MAPPING,TOLUA_VALUE_ROOT
这三个总是同时进行更新的,refid_ptr_map是id-->ptr的映射表,refid_type_map是id-->type的映射表,value_root_map是一个userdata-->ptr的映射表。在C++对象生成的时候,会对这三个表进行插入操作,当移除C++对象的时候会对这三个表进行删除操作。 这三个 表不是弱表
4:userdata
userdata是lua层面上的C++对象,它其实是个指针,指向的是真正C++对象的地址。userdata是在生成C++对象的时候压入到lua栈中的,详细 参考:tolua_pushusertype_internal,并且会把这个C++对象类型的表设置为userdata的元表,这个其实很有用。在判断lua传递数据到C++的userdata类型的时候,可以通过它的metatable,再根据metatable去注册表中拿到type,type就是它注册的C++类型。详细请参考 tolua_push.tolua_pushusertype_internal。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。