ISO C ++: как проектировать события? - PullRequest
1 голос
/ 30 октября 2011

Я знаю 2 способа определения события в 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 ++?

Ответы [ 2 ]

3 голосов
/ 30 октября 2011

Вы должны использовать Boost.Signals или Boost.Signals2.
Чтобы имитировать их, вы можете использовать коллекцию Boost.Function's / std::function.
Чтобы имитировать их, вы используете тип erasureмаршрут виртуальной функции) для гибкости.

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

1 голос
/ 30 октября 2011

Дизайн будет зависеть от специфики ваших требований.Хороший пример см. ACE Reactor .

...