Чистая виртуальная функция в качестве аргумента расширенной функции asio bind - PullRequest
0 голосов
/ 17 февраля 2019

Можно ли использовать чистую виртуальную функцию в качестве asio связывающего аргумента?
Открытая функция-член определена в базовом классе, в котором используется boost asio.
Реализация будет выполняться вего собственный контекст, поэтому необходимо использовать комбинацию boost::asio::io_service.post() и bind().На этом шаге у меня возник вопрос, возможно ли использовать чистую виртуальную функцию в качестве аргумента функции привязки или нет.

class Base
{
  ....
  void Reset()
  {
      // Direct calling a pour virtual function.
      ios_.post(std::bind(&Base::Reset_, this));
  }
protected:
  virtual void Reset_() = 0;
  boost::asio::io_service& ios_;
};

class Derived : public Base
{
  ....
protected:
  virtual void Reset_()
  {
      // reset implemented ...
  }
};

Или я должен иметь обходной путь, подобный этому?

class Base
{
  ....
  void Reset()
  {
      // Indirect calling a pour virtual function.
      ios_.post(std::bind(&Base::Reset_, this));
  }
protected:
  void Reset_()
  {
      HandleReset();
  }
  virtual void HandleReset() = 0;
  boost::asio::io_service& ios_;
};

class Derived : public Base
{
  ....
protected:
  virtual void HandleReset()
  {
      // Reset implemented ...
  }
};
...