Можно ли использовать чистую виртуальную функцию в качестве 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 ...
}
};