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()()), способный вызвать данный метод на данном объекте. Должен ли этот класс иметь доступ к private B? Думаю, нет.
Что я здесь упускаю?