Изменения

Перейти к: навигация, поиск

Участник:Qwerty787788/плюсы3сем

213 байт добавлено, 19:48, 19 января 2013
signals (aka listeners aka observers)
== signals (aka listeners aka observers) ==
что-то где-то произошло - вызывается какая-то функция обработчик
=== зачем это нужно ===
чтобы обеспечить связь между различными объектами. например кнопочку реализовать - по нажатию какое-то действие
=== примеры почему наивная реализация не всегда хорошо работает ===
Видимо наивная реализация - это колбеки (могу ошибаться)
Обратный вызов имеет два основных недостатка. Во-первых, он не является типобезопасным. Мы никогда не можем быть уверены что функция делает обратный вызов с корректными аргументами. Можно передавать function<> тогда будет типобезопасно. Во-вторых, обратный вызов жестко связан с вызывающей его функцией, так как эта функция должна точно знать какой обратный вызов надо делать.
Также могут возникнуть проблемы, если в процессе обработки одного из коллбэков список подписавшихся на сигнал изменился. Если это вектор, это может привести, к примеру, к выполнению одного коллбэка дважды или пропуску одного из них. Для решения можно сделать из подписавшихся хороший двусвязный список.
Также надо иметь в виду, что до обработки сигнала может быть возможно дойти прямо в процессе его же обработки, и нужно соблюсти reentrancy для обработчика.
Анонимный участник

Навигация