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對應的集合,然后再去集合中取得對應的域。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM