Сообщение 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]
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. Ну как-то так:
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); });
}