>

cppreference 문서 https://en.cppreference.com/w/cpp/algorithm/for_each.그 말은 :

  • 알고리즘의 일부로 호출 된 함수의 실행이 예외를 던졌고 ExecutionPolicy가 3 표준 정책 중 하나이면 std :: 종료는 이라고 불립니다. 다른 executionPolicy의 경우, 동작은 구현이 정의되어 있습니다.

나는 이것이 내가 할 수없는 것을 의미한다는 것을 해석한다.각각전달 된 기능을 통과하고 흥분 또는 관련 정보를 잡을 것으로 기대합니다.

예외를 사용하기를 기대할 것으로 예상 한 이유는 부분적으로 변경된 변경 사항을 부분적으로 실행 취소 (되돌리게 할 수 있습니다.각각전화. (어쩌면 그게 더 나은 알고리즘이있을 수 있습니다).

그러나 나는 그냥 기회에 의해 역사적인 버전을 발견했다.각각더 많은 흥미로운 행동을 갖는 것은 문서화 된 것입니다.

  • 정책이 std :: parallel_vector_execution_policy 인 경우 std :: terminate가
  • 라고합니다.
  • 정책이 STD :: Sequential_Execution_Policy 또는 std :: parallel_execution_policy, 알고리즘은 모든 파쇄되지 않은 예외를 포함하는 std :: exception_list로 알고리즘이 종료됩니다. 하나의 잡히지 않은 예외가있는 경우, 알고리즘은 STD :: exception_list에 래핑하지 않고도 레이크 할 수 있습니다. 첫 번째 예외가 발생한 후에 반환하기 전에 알고리즘이 수행하기 전에 알고리즘이 수행 할 수 있는지 지정되지 않습니다.

대신에 그렇게되는 것처럼 보입니다.끝내다실제로 예외를 사용하는 가능성이 있습니다.

그래서, 왜std :: exception_list.제거 되었습니까? 너무 논쟁의 여지가 너무 복잡하고 너무 복잡 했는가?

논리에 동의하더라도 병렬로 인해 다른 옵션이 없습니다.각각보고무효의(단, 불가사의 대신에도 놀라운 일). 그러므로, 이것std :: exception_list.프로토콜은 실패한 완료를 취소하는 데 필요한 구성 요소에서 나에게 보입니다.각각지침.

는 새로운 맞춤 정책을 기대하는 것이 합리적입니다.par_with_failed_list.어딘가에 나타날 것입니다실행 취소NS.


더 많은 컨텍스트 :이 패턴을 실행 취소시키는 패턴은 용기의 구성에 사용됩니다. 나는 사용자 정의 (병렬 /시퀀스)를 구현하고 싶다.uninitialized_value_construct_n.(언급되지 않은) 구조물이 실패 할 때 (언급되지 않은) 구조물이 실패 할 때 "실행 취소"(파괴)는


edit1 : 잠시 후, λ의 캡처 된 변수를 함수 매개 변수로 전달할 수 있습니다. 이 변수는 예외를 발생할 수있는 공유 동시 데이터가 될 수 있습니다 (예외 _list). 이것이 이미 수행되었는지 궁금합니다.


edit2 : 나는 구현을 발견했다.exception_list.HPX에서,



그것은 p0394r4였습니다

Cubbi2021-08-16 22:16:31
  • 이전 Apache Beam에서 JSON 배열을 BigQuery 테이블로 스트리밍하는 방법
  • 다음 drupal 7 - nginxconf에서 client_max_body_size를 어떻게 늘리나요?