Здравствуйте, Marty, Вы писали:
M>1) Qt. Там из очереди сообщений они извлекаются, где-то в каком-то ассоциативном массиве ищется объект, который подписался на событие, и его слот, и этот слот вызывается, всякие кастинги доп. данных сообщений производятся на основе метаинформации, полученной при помощи метакомпилера. Как-то так вроде, да?
M>Пользоваться в принципе удобно, но напрягает необходимость препроцессора, и неэффективность данного метода (и не надо мне рассказывать, что на современных системах это копейки )
ИМХО конечно, но все это совершенно неверно.
Механизм сигналов и слотов и работа Qt с сообщениями платформы это разные вещи.
Если коротко, то Qt получает события от платформы, некоторые обрабатывает только сама,
большинство превращает в наследников класса QEvent. Любой класс наследующий
от QObject или его детей, может переопределить виртуальный метод "bool QObject::event(QEvent *)"
и проверить QEvent::type и сделать "cast" в правильного наследника QEvent.
После этого он может сделать в принципе что угодно, может сделать "emit signal",
может послать другой QEvent другому объекту, ну или вообще вызывать метод другого объекта
напрямую. Можно также встроиться в систему с помощью "Qt event filter" и перехватывать
события предназначенные другому объекту.