В настоящее время я программирую систему прохождения событий для игры на C++, и я думал, что это будет полезно, если события наследуются друг от друга логически.Система C++ для передачи событий с иерархией наследования
Это означает, что я мог бы, например, вызвать событие типа NukeExplosion
, который вытекает из Explosion
(который, вероятно, выводит из пустого базового класса Event
), и было бы получить передаются все слушателям к событию типа NukeExplosion
, а также как более общий Explosion
.
До сих пор я был в состоянии придумать два возможных решения:
- Выполнение
dynamic_cast
на события для каждого набора слушателей к тому же типу события. Если это удастся, я могу передать событие всем слушателям в наборе. - Добавление фрагмента кода в каждый тип события, который вызывает событие снова, но с более общим типом. Затем событие будет передано слушателям с использованием результата оператора
typeid
в сочетании с картой слушателей.
Мне не нравится второй вариант, потому что он подвержен ошибкам и требует, чтобы я написал почти тот же код в каждом классе событий.
Проблема с первым вариантом заключается в том, что, возможно, потребуется сделать много dynamic_cast
s, и я хотел бы избежать этого.
Итак, есть ли какой-либо другой способ, который я не принял, или это первый вариант, который я могу сделать лучше всего? Или я должен полностью отказаться от наследования событий?
Хотя я уже использовал второй подход, который я описал, мне действительно нравится это решение. Единственная проблема, которую я вижу, - это то, что в системе с большим количеством обработчиков пустые функции в Handler, вероятно, будут вызваны довольно много. – f4st