2010-06-17 7 views

Antwort

6

Wenn Sie versuchen, Reflexion Informationen über eine Variable (Liste der Methoden, etc.), dann können Sie die class_info() und class_names() Funktionen nachschlagen verwenden.

Hinweis: Diese Funktionen sind nicht dokumentiert, soweit ich das beurteilen kann, aber sie existieren zumindest in Luabind 0.9. Benutzung auf eigene Gefahr.

Um diese Luabind-Funktionen in Ihrem Lua-Code zu verwenden, müssen Sie sie zuerst binden. Beispiel:

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

Dann aus dem Lua-Code, können Sie eine Variable introspect:

-- 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 
-- ... 

können Sie erhalten auch eine Liste aller Klassen Luabind kennt:

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

Dank. Es ist ein sehr hilfreiches Werkzeug, um eine Klasseninformation zu erhalten. Ich habe lange gesucht. Aber es löst das Problem nicht vollständig. Das habe ich in der Mailingliste luabind gefunden: "Ich habe herausgefunden, wie man class_info benutzt und es funktioniert hervorragend, um den Klassennamen und die Methoden, aber nicht die Attribute abzurufen. Nur die Attribute, die durch C++ verfügbar sind, werden unter Attribute nicht aufgelistet Attribute, die in lua erstellt werden. Wie bekomme ich eine Liste von Attributen, die in lua, in C++ und ihrem Wert erstellt wurden? " – kFk