Вы должны отделить значения, которые вы хотите передать функциям обработки событий, от ваших event_handler
(возможно, ни одного / нуля) и тех значений, которые приложение / пользователь event_handler
хочет передать.
Первый, который вы определяете как параметры в вашем std::function
типе, этот список параметров, конечно, должен быть одинаковым для всех функций.
Последний связан с вызовами функций, когда функция передается вашему обработчику событий, использование std::bind()
.
Имейте в виду, что это решение несет риск того, что пользователь вашей библиотеки связывает указатели или ссылки на переменные / объекты, которые больше не существуют, когда выполняется обработчик.