Какой дизайн паттерн использовать?
От: k55 Ниоткуда  
Дата: 02.07.21 21:28
Оценка:
День добрый.
Есть обертка над 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 причин.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.