Соблазнительно иметь базовый класс в качестве основного типа сообщения, но я бы посоветовал сделать его виртуальным классом, чтобы каждое сообщение было приведено для использования. Эта симметрия делает ее гораздо менее склонной к ошибкам позже, когда сложность (неизбежно) возрастает
ел бы иметь динамическую систему обмена сообщениями в моем проекте C ++, где есть фиксированный список существующих событий, события могут запускаться где угодно во время выполнения, и где вы можете подписать функции обратного вызова на определенные события.
Должна быть опция для аргументов, передаваемых в этих событиях. Например, одно событие может не нуждаться в аргументах(EVENT_EXIT)
и некоторым может понадобиться несколько(EVENT_PLAYER_CHAT: Player object pointer, String with message)
Первый вариант, позволяющий сделать это возможным, - разрешить передачу указателя void в качестве аргумента менеджеру событий при запуске события и получении его в функции обратного вызова.
Хотя: мне сказали, что пустые указатели небезопасны, и я не должен их использовать.
Как я могу сохранить (полу) динамические типы аргументов и подсчитать для моих событий, не используя указатели void?