728x90
반응형
execution::submit
송신기를 수신기에게 제출하는 사용자 지정 지점이다.
constexpr unspecified set_done = unspecified;
execution::submit 이름은 사용자 지정 지점 개체를 나타낸다. 일부 하위 표현식 s와 r의 경우 decltype((s))가 S와 같은 S 유형으로 decltype((r))가 R과 같은 R 유형으로 지정한다. 표현식 execution::submit(s, r)은 sender_to<S, R>이 true가 아니면 잘못된 형식이다. 그렇지 않으면 다음과 동일한 표현식이다:
- s.submit(r), 해당 표현식이 유효하고 S가 송신기를 모델링하는 경우. 선택된 함수에서 송신기 s를 통해 수신기 개체 r을 제출하지 않은 경우, 프로그램은 잘못된 형식으로 진단이 필요하지 않다.
- 그렇지 않으면 submit(s, r), 해당 표현식이 유효하고 S가 송신기를 모델링하는 경우, void submit(); 선언이 포함되고 execution::submit의 선언이 포함되지 않은 컨텍스트에서 오버로드 작업이 수행된다. 오버로드 작업에서 선택된 함수가 송신기 s를 통해 수신기 개체 r을 제출하지 않으면, 프로그램은 잘못된 형식으로 진단은 필요하지 않다.
- 그렇지 않으면 execution::start((new submit_receiver<S, R>{s, r})->state_), 여기서 submit_receiver는 다름과 동일한 구현-정의된 클래스 템플릿이다:
template<class S, class R> struct submit_receiver { struct wrap { submit_receiver * p_; template<class...As> requires receiver_of<R, As...> void set_value(As&&... as) && noexcept(is_nothrow_receiver_of_v<R, As...>) { execution::set_value(std::move(p_->r_), (As&&) as...); delete p_; } template<class E> requires receiver<R, E> void set_error(E&& e) && noexcept { execution::set_error(std::move(p_->r_), (E&&) e); delete p_; } void set_done() && noexcept { execution::set_done(std::move(p_->r_)); delete p_; } }; remove_cvref_t<R> r_; connect_result_t<S, wrap> state_; submit_receiver(S&& s, R&& r) : r_((R&&) r) , state_(execution::connect((S&&) s, wrap{this})) {} };
요구 사항
일반 헤더: boost/asio/execution/submit.hpp
편의 헤더: boost/asio/execution.hpp
Boost.Asio 홈
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 색인 - executor::executor (0) | 2021.01.25 |
---|---|
Boost.Asio 색인 - execution_context::execution_context (0) | 2021.01.24 |
Boost.Asio 색인 - execution::start (0) | 2021.01.24 |
Boost.Asio 색인 - execution::set_value (0) | 2021.01.24 |
Boost.Asio 색인 - execution::set_error (0) | 2021.01.24 |