День добрый.
Есть обертка над DBUS которая получает event. Каждый евент может содержать набор параметров, т.е. у каждого события свой набор параметров.
Хочется сделать так, что бы внешний класс мог подписаться на событие и получить этот набор данных вместе с событием.
так же хочется иметь единый способ "подписки" без введения разных API зависищих от события и типов данных.
Простой вариант это иметь массив "variant"-ов (а-ля с труктура union с типов данных в ней) и передавать его в Callback.
Вот примерный код.
struct TCallBack
{
void Callback(const string &name, vector<variant> params);
}
struct TWrapper
{
void Subscribe(const string &name, CallBack *callback);
TCallBack *m_callback;
void loop()
{
if (event)
{
vector<variant> params = GetParamsFromEvent(event);
m_callback->Callback(event->name, params);
}
}
}
Или делать "..." в сигнатуре калбэка а подписчик сам ищет что ему надо.
Какой еще есть способ что бы уйти от "вариантов" и спрятать работу с event в обертке.
Ограничения: C++11.
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.