0

这行代码可以正确编译,没有问题:

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。我在这里做错了什么?

4

1 回答 1

0

您是否阅读过绑定故障排除指南?我不熟悉您的编译器,但您的错误似乎类似于故障排除部分“无法使用指定的参数调用函数对象”中的第二个项目符号。

于 2010-06-06T15:04:19.797 回答