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)의 사용 가능 여부에도 영향을 미친다는 점에 유의한다.
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 개요 - C++ 2011 지원 - 배열 컨테이너 (0) | 2020.12.13 |
---|---|
Boost.Asio 개요 - C++ 2011 지원 - 가변 길이 템플릿 (0) | 2020.12.13 |
Boost.Asio 개요 - C++ 2011 지원 - 이동 가능 I/O 개체 (0) | 2020.12.13 |
Boost.Asio 개요 - C++ 2011 지원 (0) | 2020.12.13 |
Boost.Asio 개요 - SSL (0) | 2020.12.13 |