如何设计事件

ISO C++: How to design events?

本文关键字:事件      更新时间:2023-10-16

我知道用c++设计事件的两种方法:

1:使用回调:

typedef void (*callback_type)(void);
class my_class
{
  public:
    my_class(callback_type c)
    {
       m_callback = c;
    }
    void raise_event()
    {
       m_callback();
    }
  private:
    callback_type m_callback;
};

2:使用virtual方法:

class my_class
{
   public:
   virtual void my_event() = 0;
   void raise_event()
   {
      my_event();
   }
};
class main_class : public my_class
{
   public:
   virtual void my_event()
   {
      // Handle EVENT.
   }
};

是否有其他的方法或想法来设计事件?

在ISO c++中设计事件的最佳模式是什么?

您应该使用Boost。信号或Boost.Signals2.
为了模拟这些,您可以使用Boost集合。Function's/std::function 's.
为了模拟这些,您可以使用类型擦除(因此使用虚函数路由)来提高灵活性。

请注意,这些都不是微不足道的,所以如果可能的话,您应该真正尝试使用现有的解决方案。

设计将取决于您的具体需求。有关一个很好的例子,请参阅ACE Reactor。