Se stai cercando per cercare informazioni su una variabile di riflessione (elenco dei metodi, ecc), allora è possibile utilizzare i class_info()
e class_names()
funzioni.
Nota: Queste funzioni non sono documentate per quanto posso dire, ma esistono almeno in Luabind 0.9. Utilizzare a proprio rischio.
Per utilizzare queste funzioni di Luabind nel codice Lua, è necessario prima associarle. Esempio:
#include "luabind/class_info.hpp"
/* ... */
luabind::open(L);
luabind::bind_class_info(L);
Poi dal codice Lua, è possibile introspezione una variabile:
-- 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
-- ...
È inoltre possibile ottenere un elenco di tutte le classi Luabind conosce:
for i, v in ipairs(class_names()) do print(v) end
-- Prints:
-- class_info_data
-- Config
-- Game
-- ...
Grazie. È uno strumento molto utile per ottenere informazioni sulla classe. Lo stavo cercando da molto tempo. Ma non risolve completamente il problema. Questo è quello che ho trovato nella mailing list di luabind: "Ho capito come usare class_info e funziona alla grande per recuperare il nome e i metodi della classe ma non gli attributi, solo gli attributi che sono esposti da C++ sono elencati sotto Attributi e non attributi che vengono creati in lua. Come potrei ottenere una lista di attributi creati in lua, in C++ e il loro valore? " – kFk