Здравствуйте!
Вроде была уже тут такая тема, но я не смог найти, и к чему там пришли, тоже подзабыл
Так что побаяню
Почему сюда — потому что интересуют не абстрактные архитектуры, а плюсовые решения.
Я как-то отстал от жизни, привык один патерн использовать, меня в принципе устраивает, но может, научная мысль уже далеко ушла вперед?
Вот есть некая очередь сообщений/событий. Из неё они извлекаются и как-то обрабатываются.
Мне известны буквально только пара механизмов для реализации такого поведения. Например:
1) Qt. Там из очереди сообщений они извлекаются, где-то в каком-то ассоциативном массиве ищется объект, который подписался на событие, и его слот, и этот слот вызывается, всякие кастинги доп. данных сообщений производятся на основе метаинформации, полученной при помощи метакомпилера. Как-то так вроде, да?
Пользоваться в принципе удобно, но напрягает необходимость препроцессора, и неэффективность данного метода (и не надо мне рассказывать, что на современных системах это копейки
)
2) В разных книжках читал, но никогда не использовал — в очередь кладутся уже объекты, которые знают сами, что надо делать (с методом virtual doJob() etc). Никогда не понимал этого. Либо я саму идею не понял правильно, либо что-то еще, но место, где генерируется событие, обычно же ничего не знает о том, как событие должно обрабатывается. Никогда не пробовал применить такой способ.
3) Виндовая очередь оконных сообщений и её обработка. Тут есть вариации: чистый WinAPI со своими message crackers из windowsx.h, WTL со схожим механизмом, MFC. С MFC плотно дела не имел, там вроде немного по другому — уже есть некая "карта" обработки сообщений, которая дергает виртуальные методы, которые переопределяются в пользовательском коде. Из плюсов — отсутствие какого-либо оверхеда вообще. Да и использовать вполне удобно, когда все кракеры уже написаны до нас.
Я в основном привык к последнему "виндовому" подходу, раньше как-то работал с разными протоколами обмена с различными устройствами, и вполне успешно применял его для обработки различных поступающих данных. Но из недостатков у такого подхода в наличии имеется активное использование препроцессора, и прочие грязные штуки — кастинги всего во всё и прочее всё такое.
Вот хочу узнать, как подобное можно красиво именно на плюсах реализовать. Хотелось бы обойтись без головоломных шаблонов, но наверно не получится
Дискасс, коллеги