Как перебирать класс luabind (в lua или в C++)?Как перебирать класс 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
Благодаря
Как перебирать класс luabind (в lua или в C++)?Как перебирать класс 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()
и class_names()
функции.
Примечание: Эти функции не документированы, насколько я могу судить, но они по крайней мере существуют в 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
-- ...
Спасибо. Это очень полезный инструмент для получения информации о классе. Я искал его в течение долгого времени. Но это не полностью решает проблему. Вот что я нашел в списке рассылки luabind: «Я понял, как использовать class_info, и он отлично работает, чтобы получить имя и методы класса, но не атрибуты. Только атрибуты, которые отображаются с помощью C++, перечислены в разделе« Атрибуты », атрибуты, созданные в lua.Как я могу получить список атрибутов, созданных в lua, в C++ и их значение? " – kFk