Как выполнить итерации через 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

Спасибо

6
задан kFk 17 June 2010 в 11:03
поделиться

1 ответ

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

Похожие вопросы: