четверг, 21 июля 2016 г.

[prog.c++14] Возможности современного C++ оказываются очень в тему при работе с Asio

Как только берешься за Asio, так сразу фишки из С++11/14 становятся ну очень полезными:

class handler_t : public std::enable_shared_from_this< handler_t >
{
   ...
   templatetypename H, typename... T >
   auto wrap_handler( H handler, T && ...tail )
   {
      return m_strand.wrap( std::bind( handler, shared_from_this(), std::forward<T>(tail)... ) );
   }
   ...
   void
   activate( const endpoint & receiver_endpoint )
   {
      m_timer.expires_from_now( std::chrono::seconds(2) );
      m_timer.async_wait( wrap_handler( &handler_t::on_timer, _1 ) );

      m_socket.async_connect( receiver_endpoint,
            wrap_handler( &handler_t::on_connect, _1 ) );
   }
   ...
}

Не просто было бы в рамках С++03 написать вот такой простенький wrap_handler.

PS. В тему будет и вот эта заметка двухлетней давности. Отрадно отметить, что высказанные тогда надежды на бодрое развитие C++14 и C++17 пока оказались не напрасными.

Отправить комментарий