Sto cercando di adattare uno degli esempi boost :: asio per usare le librerie C++ 11/TR1 dove possibile. Il codice originale è simile al seguente:Se std :: bind è compatibile con 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));
}
Se sostituisco boost::bind
con std::bind
come segue:
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));
}
ricevo un messaggio di errore di grandi dimensioni, con le estremità con:
/usr/include/c++/4.4/tr1_impl/functional:1137: error: return-statement with a value, in function returning 'void'
Sono utilizzando gcc versione 4.4 con boost versione 1.47
Mi aspettavo boost :: bind e std :: bind per essere intercambiabile.
std richiede molto da boost e tr1, ma non sono uguali. Mi chiedo se questo abbia qualcosa a che fare con [questa domanda] (http://stackoverflow.com/questions/6653531/workaround-to-allow-tr1function-to-swallow-return-values) – spraff
a [potenzialmente correlato] (https : //svn.boost.org/trac/boost/ticket/3053) ticket –
@Sam Miller Ho trovato il biglietto ma non è stato aggiornato per 3 anni! Ho anche provato questo contro la v1.48 di boost, e usando std :: placeholders invece di boost :: asio :: placeholders. Per ora mi sto attenendo con boost :: shared_ptr e boost :: bind per il codice asio. – mark