次のコード行は、問題なく正しくコンパイルされます。
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
これは機能し、正しく印刷されます。ここで何が間違っていますか?