프로그래밍/c++

C++11 람다를 보다 깔끔하게 쓰는 방법

제페 2015. 9. 19. 22:45
반응형


1
2
3
4
5
6
7
8
9
10
11
    // 비동기 송신을 등록합니다.
    socket.async_send(buffer(sendChunk, sendBytes),  
strand.wrap( 
        [this, buffer = std::move(sendBuffer)](const auto& error, size_t bytes) // 람다
    {// 완료 함수
      if (error)
      {// 오류를 알린다.
        this->on_error(error);
      }
    } // 람다 끝
    ));
cs


Vs2015에서 람다를 써서 비동기 핸들러를 설정하는데 코드가 지저분하게 느껴졌다. {}() 겹쳐지면서 어디까지가 무슨 코드고 이런 구분이 뚜렷하지가 않게 느껴지더라.

어떻게하면 보다 깔끔하게 보일까를 생각했는데 람다를 변수로 지정 가능하다는 생각났다.

코드는 이렇게 바뀐다.


1
2
3
4
5
6
7
8
9
10
11
  const auto handler = [this, buffer = std::move(buffer)](const auto& error, size_t bytes)
  {
    if (error)
    {// 오류를 알린다.
      this->on_error(error);
    }
  };
 
    // 비동기 송신을 등록합니다.
  socket.async_send(asio::buffer(buffer_data, size), strans.wrap(handler));
cs

정말 대단해~!

반응형