Diese Frage beinhaltet boost::asio
ist aber eine reine C++ 11
Frage.Übergeben eines Lambda mit Rückgabewert in einen Rückruf ohne Rückgabewert
Ich bin neu in C++ 11
& lambda
Techniken, die ich mit boost::asio::async_connect
für die Netzwerkkommunikation zu nutzen versuchen.
Folgendes ist meine Funktion, die eine asynchrone Verbindung mit dem Host versucht.
bool MyAsyncConnectFunction() {
//some logic here to check validity of host
if (ip_is_not_resolved)
return false;
the_socket.reset(new tcp::socket(the_io_service));
auto my_connection_handler = [this]
(const boost::system::error_code& errc, const tcp::resolver::iterator& itr)
{
if (errc) {
//Set some variables to false as we are not connected
return false;
}
//Do some stuff as we are successfully connected at this point
return true;
};
//How is async_connect taking a lambda which
boost::asio::async_connect(the_socket, IP_destination, tcp::resolver::iterator(), my_connection_handler);
return true;
}
Alles funktioniert gut. Es gibt absolut keine funktionalen Probleme. Ich frage mich jedoch, ob boost::asio::async_connect
einen ConnectionHandler without a return type
in seinem letzten Parameter übernimmt, aber ich übergebe ein Lambda, d. H. my_connection_handler
, die einen Wert zurückgibt.
Wie ist es möglich, dass ich ein Lambda mit einem Rückgabewert übergeben kann, während boost::asio::async_connect
's 4. Param einen Rückruf ohne einen Rückgabewert nimmt?
der Rückgabewert kann verworfen werden, wie in diesem einfachen Beispiel: http://coliru.stacked-crooked.com/a/7d451892e201ba84 das gleiche geschieht in Asio: https://github.com/boostorg/asio/ Blob/42e7869f411a75512fb6994c634eb086fb9eb5cc/include/boost/asio/impl/connect.hpp # L258 –
http://www.boost.org/doc/libs/1_62_0/doc/html/boost_asio/reference/asynchronous_operations.html#boost_asio.reference. asynchronous_operations.return_type_of_an_initiating_function – Arunmu
@ms Rückgabewerte werden verworfen !! Bedeutet das, dass ich einen Rückgabewert-basierten Rückruf an einen Callback mit ungültigem Rückgabewert binden kann? Oder ist das der Weg, wie asios connect_handler geschrieben wird? Wie gesagt, ich bin Neuling. Sorry, wenn es eine dumme Frage ist –