boost:: bind чрезвычайно удобен в ряде ситуаций. Один из них - отправить/отправить вызов метода, чтобы io_service выполнил вызов позже, когда это возможно.
В таких ситуациях boost:: bind ведет себя так, как можно было бы искренне ожидать:
#include <boost/asio.hpp>
#include <boost/bind.hpp>
boost::asio::io_service ioService;
class A {
public: A() {
// ioService will call B, which is private, how?
ioService.post(boost::bind(&A::B, this));
}
private: void B() {}
};
void main()
{
A::A();
boost::asio::io_service::work work(ioService);
ioService.run();
}
Однако, насколько я знаю, boost создает функтор (класс с operator()()), способный вызвать данный метод на данном объекте. Должен ли этот класс иметь доступ к частному B? Наверное, нет.
Что мне здесь не хватает?