Как выполнить итерации через luabind класс (в lua или в C++)?
class 'A'
function A:__init()
-- Does not work
-- self is userdata, not a table
for i, v in pairs(self) do
end
end
Спасибо
Если вы пытаетесь найти информацию об отражении для переменной (список методов и т. Д.), Вы можете использовать class_info ()
и имя_класса ()
функций.
Примечание: Насколько я могу судить, эти функции не задокументированы, но, по крайней мере, они существуют в Luabind 0.9. Используйте на свой риск.
Чтобы использовать эти функции Luabind в вашем коде Lua, вам нужно сначала связать их. Пример:
#include "luabind/class_info.hpp"
/* ... */
luabind::open(L);
luabind::bind_class_info(L);
Затем из вашего кода Lua вы можете проанализировать переменную:
-- 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
-- ...