шаблоны проектирования — система событий C ++ — использование событий на основе кучи или стека

Я пытаюсь разработать простую систему событий, которая «в основном» выглядит следующим образом:

  • Наблюдатель Сущность хранит список всех объектов, которые должны быть уведомлены. Также хранится очередь сгенерированных событий. События затем обрабатываются списком объектов, итеративно через этот список объектов.
  • объект хранит список наблюдателей, которым он отправляет события. Каждый конкретный объект, который наследуется от базового объекта, может запускать свои собственные специализированные события (клавиша, мышь, столкновение и т. Д.). У объекта также есть метод HandleEvent(..) с различными перегрузками для определения типа времени компиляции вместо использования dynamic_casting,

Что было бы лучше выбрать при генерации событий: создавать их в стеке и передавать их по ссылке, или динамически размещать их в куче и использовать dynamic_casting и позволить наблюдателю освободить их, когда они обрабатываются объектами, которые могут их обрабатывать ? (Например, нет ли необходимости в динамическом размещении, когда событие может быть запущено довольно часто; как насчет динамического приведения, разве его нельзя избежать?).

Кроме того, это не совсем потокобезопасный сценарий ..

3

Решение

Вам нужно динамическое распределение? Нет. Как правило, вы хотите

void fireEvent()
{
Event ev;
for ( each observer )
observer.trigger(ev);
}

И подпись наблюдателя

void trigger(const Event& ev);

Обратите внимание, что «передача ссылок на них» не соответствует действительности, педантично говоря. Это на самом деле «передача их по ссылке».

2

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector