2010-06-17 11 views
5

लुबाइंड क्लास (लुआ या सी ++ में) के माध्यम से कैसे पुनरावृत्ति करें?लुबाइंड क्लास (लुआ या सी ++ में) के माध्यम से कैसे पुनरावृत्ति करें?

class 'A' 

function A:__init() 
    -- Does not work 
    -- self is userdata, not a table 
    for i, v in pairs(self) do 
    end 
end 

धन्यवाद

उत्तर

6

आप एक चर (विधि की सूची, आदि) के बारे में प्रतिबिंब जानकारी देखने के लिए कोशिश कर रहे हैं तो आप class_info() और class_names() कार्यों का उपयोग कर सकते हैं।

नोट: इन कार्यों को जहां तक ​​मैं कह सकता हूं, दस्तावेज नहीं किया गया है, लेकिन वे कम से कम लुबाइंड 0.9 में मौजूद हैं। अपने जोखिम पार इस्तेमाल करें।

अपने लुआ कोड में इन लुबाइंड कार्यों का उपयोग करने के लिए, आपको पहले उन्हें बांधना होगा। उदाहरण:

#include "luabind/class_info.hpp" 
/* ... */ 
luabind::open(L); 
luabind::bind_class_info(L); 

फिर अपने लुआ कोड से, आप एक चर आत्मनिरीक्षण कर सकते हैं:

-- Variable "game" is an instance of class "Game" 
c = class_info(game) 

print(c.name) 
-- Prints: 
-- Game 

for k, v in pairs(c.methods) do print(k, v) end 
-- Prints: 
-- get_config function: 01765AE0 
-- on_init  function: 01765E90 
-- ... 

for k, v in pairs(c.attributes) do print(k, v) end 
-- ... 

तुम भी Luabind बारे में जानता है सभी वर्गों की एक सूची प्राप्त कर सकते हैं:

for i, v in ipairs(class_names()) do print(v) end 
-- Prints: 
-- class_info_data 
-- Config 
-- Game 
-- ... 
+0

धन्यवाद। कक्षा की जानकारी प्राप्त करने के लिए यह एक बहुत उपयोगी उपकरण है। मैं इसे लंबे समय से ढूंढ रहा था। लेकिन यह समस्या को पूरी तरह से हल नहीं करता है। मुझे लुइबिंड मेलिंग सूची में यही मिला है: "मुझे पता चला कि class_info का उपयोग कैसे करें और यह क्लास नाम और विधियों को पुनर्प्राप्त करने के लिए बहुत अच्छा काम करता है लेकिन गुण नहीं। केवल सी ++ द्वारा प्रकट किए गए गुण गुणों के तहत सूचीबद्ध नहीं हैं लुआ में बनाए गए गुण। मैं lua में बनाए गए गुणों की सूची कैसे प्राप्त करूं, सी ++ और उनके मूल्य में? " – kFk

संबंधित मुद्दे

 संबंधित मुद्दे