C++ C+中的EventEmitter类+;:侦听器和发射器
我正在尝试实现一个类,该类允许监听一些事件,当这些发射被发射时,它们将收到通知 所以我想用函子C++ C+中的EventEmitter类+;:侦听器和发射器,c++,events,design-patterns,listener,event-listener,C++,Events,Design Patterns,Listener,Event Listener,我正在尝试实现一个类,该类允许监听一些事件,当这些发射被发射时,它们将收到通知 所以我想用函子 class MyFunctor { public: virtual void emit() {} vitual void compare() {} }; class MyFunctorSpecial : public MyFunctor { void (*)() ab; public: MyFunctorSpe
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");
我认为在编译时,Emit()
可以获得有关各种参数的数据类型的信息。我可以使用这些信息来实现它,使用模板或任何东西
这个问题是否有另一种模式?我如何才能做到这一点?针对您的问题的常见设计模式称为 你所谓的“函子”不是函子。 如果是这样,它们将实现一个操作符()方法,并且可以像函数一样被调用(因此命名为functor)。你的不是 例如,这是一个函子:(注意操作符())
但这并不能真正回答问题。他们想在投票人身上传递论点。我的问题可能有问题,但请留下评论。
emitter.Emit("hello", 45, false);
class MyFunctor
{
public:
void operator()(){};
};