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()(){};
};