我想適應其中一個boost :: asio示例,以儘可能使用C++ 11/TR1庫。原來的代碼如下所示:應該std :: bind與boost :: asio兼容嗎?
void start_accept()
{
tcp_connection::pointer new_connection =
tcp_connection::create(acceptor_.get_io_service());
acceptor_.async_accept(new_connection->socket(),
boost::bind(&tcp_server::handle_accept, this, new_connection,
boost::asio::placeholders::error));
}
如果我std::bind
取代boost::bind
如下:
void start_accept()
{
tcp_connection::pointer new_connection =
tcp_connection::create(acceptor_.get_io_service());
acceptor_.async_accept(new_connection->socket(),
std::bind(&tcp_server::handle_accept, this, new_connection,
boost::asio::placeholders::error));
// std::bind(&tcp_server::handle_accept, this, new_connection, _1));
}
我獲得了大量的錯誤信息,用兩端有:
/usr/include/c++/4.4/tr1_impl/functional:1137: error: return-statement with a value, in function returning 'void'
我使用海灣合作委員會版本4.4與升壓版本1.47
我預計boost :: bind和std :: bind可以互換。
std需要很多的提升和tr1,但他們不一樣。我不知道這是否與[這個問題](http://stackoverflow.com/questions/6653531/workaround-to-allow-tr1function-to-swallow-return-values) – spraff
一個[潛在相關](https ://svn.boost.org/trac/boost/ticket/3053)ticket –
@Sam Miller我找到了這張票,但它沒有更新3年!我也曾嘗試過這種反對v1.48的boost,並使用std ::佔位符而不是boost :: asio ::佔位符。現在我堅持使用boost :: shared_ptr和boost :: bind for asio代碼。 – mark