この質問にはboost::asio
が含まれますが、純粋なC++ 11
です。戻り値なしの戻り値を持つラムダを戻り値なしでコールバックに渡す
私は、ネットワーク通信にboost::asio::async_connect
で使用しようとしていますC++ 11
& lambda
技術に新しいです。
以下は、ホストとの非同期接続を試みる私の機能です。
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;
}
すべて正常です。機能的な問題は絶対にありません。しかし、私はboost::asio::async_connect
が最後のパラメータでConnectionHandler without a return type
を取るのだろうと思っていますが、ラムダ、すなわちmy_connection_handler
を渡して値を返しています。
boost::asio::async_connect
の4番目のparamが戻り値なしでコールバックを取るのに対し、私は戻り値でラムダを渡すことができますか?
戻り値は、この単純な例のように廃棄することができる。http://coliru.stacked-crooked.com/a/7d451892e201ba84 同じ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戻り値は破棄されます!戻り値に基づくコールバックをvoid戻りコールバックにバインドできるということですか?それともasioのconnect_handlerが書かれているのでしょうか?私が言ったように私は初心者です。申し訳ありませんが、その愚かな質問 –