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