Информация об изменениях

Сообщение Re: Какой дизайн паттерн использовать? от 03.07.2021 2:22

Изменено 03.07.2021 2:24 Vamp

Re: Какой дизайн паттерн использовать?
Здравствуйте, k55, Вы писали:

k55>Какой еще есть способ что бы уйти от "вариантов" и спрятать работу с event в обертке.

k55>Ограничения: C++11.
Типизировать callback типом эвента. Заодно упростится dispatch. Ну как-то так:

[cc]
struct EventA {
static constexpr auto id = 0;

template <class T>
static void process(const char* raw, T&& callback) {
// get data from char array
callback(data1, data2, data3);
}
};

std::map<int, std::vector<std::function<void (const char*)>> subs;
template<class Event, class Subscriber>
void subscribe(Subscriber sub)
{
subs[Event::id].push_back([sub](const char* raw) { Event::process(raw, sub); });
}
[/cc]
Re: Какой дизайн паттерн использовать?
Здравствуйте, k55, Вы писали:

k55>Какой еще есть способ что бы уйти от "вариантов" и спрятать работу с event в обертке.

k55>Ограничения: C++11.
Типизировать callback типом эвента. Заодно упростится dispatch. Ну как-то так:

struct EventA {
   static constexpr auto id = 0;
   
   template <class T>
   static void process(const char* raw, T&& callback) {
      // get data from char array
      callback(data1, data2, data3);
   }
};

std::map<int, std::vector<std::function<void (const char*)>> subs;
template<class Event, class Subscriber>
void subscribe(Subscriber sub)
{
    subs[Event::id].push_back([sub](const char* raw) { Event::process(raw, sub); });
}