Как luabind неявно использует объекты?

Не вдаваясь в слишком много ненужных подробностей о большом мультибиблиотечном проекте, над которым я работаю, я бы хотел задать вопрос о конкретном событии, которое произошло в нем. Я использую Luabind, чтобы иметь мой интерфейс кода C ++ с моим кодом Lua, и у меня есть структура классов с наследованием, например, так:

GuiWidget

GuiButton: GuiWidget

Я зарегистрировал оба этих класса с Lua через Luabind. Затем я делаю следующее, где widget это указатель на экземпляр GuiWidget учебный класс:

lua_newtable(luaState);
luabind::object(luaState, widget).push(luaState);
lua_setfield(luaState, 2, "widget");
lua_setglobal(luaState, "event");
//This line connects to some other code I wrote that just executes a file and handles errors.
luaMachine->doFile(widget->getUserString("eventMouseButtonClick"));
lua_pushnil(luaState);
lua_setglobal(luaState, "event");

Теперь этот фрагмент кода может обрабатывать что угодно, от кнопок до полос прокрутки и даже целых окон. Далее в коде lua я вызываю эту строку кода, когда нажимается кнопка-флажок:

event.widget:setSelected(not event.widget:getSelected())

Это работает. Несмотря на то, что указатель нажат GuiWidget указатель на код lua как-то знает, использовать функциональность, уникальную для GuiButton класс для этого конкретного экземпляра. Как оно это делает? Как он берет указатель на виджет и автоматически знает, что конкретный виджет является кнопкой? Я не верил, что это возможно, поэтому мне потребовалось некоторое время, чтобы прийти к этому решению, но я решил, что сделаю снимок в темноте, и это сработало как-то.

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]