Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - C++ 2011 지원 - 이동 가능 핸들러

까마귀75 2020. 12. 13. 01:36
728x90
반응형

이동 가능 핸들러 (Movable Handlers)

C++11 이상에서는 사용자 정의 완료 핸들러는 이동 생성이 가능해야하고 복사 생성은 가능하지 않아도 된다.

 

이동 지원을 사용하는 경우, 다음과 같이 문서에 있는 비동기식은:

template <typename Handler>
void async_XYZ(..., Handler handler);

 

실제로 다음과 같이 선언된다:

template <typename Handler>
void async_XYZ(..., Handler&& handler);

 

핸들러 인수는 완벽하게 전달되고 이동 생성은 async_XYZ() 본문내에서 발생한다. 이렇게하면 다른 모든 함수 인수가 이동전에 평가된다. 이것은 async_XYZ()에서 다른 인수가 핸들러의 멤버일 경우 중요하다. 예를 들면:

struct my_operation
{
  unique_ptr<tcp::socket> socket;
  unique_ptr<vector<char>> buffer;
  ...
  void operator(error_code ec, size_t length)
  {
    ...
    socket->async_read_some(boost::asio::buffer(*buffer), std::move(*this));
    ...
  }
};

 

이동 지원은 -std=c++0x 또는 -std=gnu++0x 컴파일러 옵션을 사용하는 경우 g++ 4.5 이상에 대해 자동으로 활성화된다. BOOST_ASIO_DISABLE_MOVE를 정의하여 비활성화하거나 BOOST_ASIO_HAS_MOVE를 정의하여 다른 컴파일러에 대해 명시적으로 활성화할 수 있다. 이러한 매크로는 이동 가능 I/O 개체(Movable I/O Objects)의 사용 가능 여부에도 영향을 미친다는 점에 유의한다.

 

 

C++ 2011 지원  Boost.Asio 개요  Boost.Asio 홈

728x90
반응형