Во-первых, попробуйте в любом случае с boost :: signal. Не думайте, что это не будет достаточно быстро, пока вы не попробуете в вашем конкретном случае, которое является вашим приложением
Если это недостаточно эффективно, возможно, что-то вроде FastDelegate подойдет вашим потребностям? (Я не пробовал, но слышал, что это было хорошим решением в некоторых случаях, когда boost :: signal не подходит).
В любом случае, если в вашем приложении используется сигнал для каждого кадра, возможно, стоит заменить сигнальную систему на что-то более простое, например контейнер, содержащий объекты / функторы, которые будут называться в каждом кадре. Сигнал больше предназначен для немедленного управления «событиями», чем для динамического цикла цикла (позволяющего изменять функции, называемые каждым кадром).
(У меня есть мое собственное решение (ОБНОВЛЕНИЕ: сейчас оно очень старое и устаревшее), которое я активно использую в игре, и, например, у меня нет проблем с производительностью, поэтому, возможно, что-то подобное может помочь).