将成员信号绑定到函数

时间:2010-05-19 02:13:29

标签: c++ boost-asio boost-bind boost-signals

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

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));

我得到了一大堆incomprehensible errors(链接因为它太长而不适合这里)。

另一方面,我成功地将一个自由信号绑定到一个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 :(得分:0)

您是否通读了绑定troubleshooting guide?我不熟悉你的编译器,但你的错误似乎与故障排除部分中的第二个子弹类似“无法使用指定的参数调用函数对象。”