Как boost::bind может вызывать приватные методы?

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? Думаю, нет.

Что я здесь упускаю?

19
задан Gabriel 30 June 2011 в 17:13
поделиться