Я работаю над модулем, который использует систему обратного вызова, которая не была реализована очень хорошо.Клиенты регистрируются с идентификатором и будут перезваниваться с переменной (или два, или ни одного).Проблема в том, что практически для каждого идентификатора есть разные переменные(Например: Id1 -> char*
, Id2 -> int
).Это достигается передачей переменной через указатель.Таким образом, обратный вызов выглядит как
typedef void (*NotifFunctionPtr)(void* ctx, const void* option);
С таким подходом много проблем, и я хочу заменить его на (тип) безопасный и современный способ обработки этого.Однако это не так просто, как кажется, у меня есть некоторые идеи (like boost::function
или замена void*
структурой, которая инкапсулирует type и ptr), но я думаю, что, возможно, есть лучшая идея, поэтому мне было интересно каков современный способ настройки безопасного обратного вызова в C ++ .
Редактировать: Другая идея состоит в регистрации обратного вызова с типом T через функцию шаблона, которая вызывает обратный вызов с тем же типом T.это жизнеспособно или реализовано в библиотеке?