2010-06-17 2 views

risposta

6

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

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