события — класс EventEmitter в C ++: слушатель и эмиттер

Я пытаюсь реализовать класс, который позволил бы прослушивать некоторые события, и когда эти испускаются, они будут получать уведомления.

Так что я подумал об использовании Функторов,

 class MyFunctor {
public:
virtual void emit() {}
vitual void compare() {}
};

class MyFunctorSpecial : public MyFunctor {
void (*)() ab;
public:
MyFunctorSpecial(void (*a)()) : ab(a) {}
void emit() { ab(); }
};
class EventEmitter {
std::map<std::string, std::vector<MyFunctor> > eventMap;
public:
void On(const std::string &, const MyFunctor &) {
// add to the map
}

void Emit(const std::string & eventName) {
// emit the event
// for all listeners in the vector for this event-name
// call the emit of them.
}
};

EventEmitter emitter;
// some function - abc()
MyFunctorSpecial funct(abc);
emitter.On("hello", funct);
emitter.Emit("hello");

Но теперь я хочу передать аргументы слушателям. подобно

 emitter.Emit("hello", 45, false);

Я думаю, что эта информация будет доступна для Emit() во время компиляции, о типах данных различных аргументов. Могу ли я использовать эту информацию, чтобы сделать это, используя шаблоны или что-нибудь еще.

Есть ли другой тип паттерна для этой проблемы? Как я могу это сделать?

-1

Решение

Общий шаблон дизайна для вашей проблемы называется Наблюдатель Дизайн-Шаблон.

введите описание изображения здесь

Ваши так называемые «функторы» не функторы.
В таком случае они бы реализовали метод operator () и могли бы вызываться как функции (таким образом, функтор имени). Ваш нет.

Например, это функтор: (обратите внимание на Оператор ())

class MyFunctor
{
public:
void operator()(){};
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector