Как перебрать класс luabind (в lua или в c ++)? - PullRequest
5 голосов
/ 17 июня 2010

Как перебрать класс 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

Спасибо

1 Ответ

6 голосов
/ 18 июня 2010

Если вы пытаетесь найти информацию об отражении переменной (список методов и т. Д.), Вы можете использовать функции 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
--   ...
...