Привязка сигнала члена к функции - PullRequest
0 голосов
/ 19 мая 2010

Эта строка кода без проблем компилируется:

boost::bind(boost::ref(connected_),
            boost::dynamic_pointer_cast<session<version> >(shared_from_this()),
            boost::asio::placeholders::error);

Однако при назначении его на boost :: function или в качестве обратного вызова, например:

socket_->async_connect(connection_->remote_endpoint(),
                      boost::bind(boost::ref(connected_),
                      boost::dynamic_pointer_cast<session<version> >(shared_from_this()),
                      boost::asio::placeholders::error));

Я получаю целую кучу непонятных ошибок (связано, поскольку здесь слишком долго помещаться).

С другой стороны, мне удалось связать свободный сигнал с boost :: function следующим образом:

void print(const boost::system::error_code& error)
{
    cout << "session connected";
}

int main()
{
boost::signal<void(const boost::system::error_code &)> connected_;
connected_.connect(boost::bind(&print, boost::asio::placeholders::error));

    client<>::connection_t::socket_ptr socket_(new client<>::connection_t::socket_t(conn->service())); // shared_ptr of a tcp socket

    socket_->async_connect(conn->remote_endpoint(),
                       boost::bind(boost::ref(connected_),
                       boost::asio::placeholders::error));
    conn->service().run(); // io_service.run()
    return 0;
}

Это работает и печатает session connected правильно. Что я здесь не так делаю?

1 Ответ

0 голосов
/ 06 июня 2010

Прочитали ли вы bind руководство по устранению неполадок ? Я не знаком с вашим компилятором, но ваша ошибка кажется похожей на второй пункт в разделе устранения неполадок «Объект функции не может быть вызван с указанными аргументами.»

...