ParallelForEachBody

[req.parallel_for_each_body]

Body タイプは、[function.objects] ISO C++ 標準セクションの関数オブジェクトに関する要件を満たしている場合、ParallelForBody の要件も満たします。また、次のいずれかの要件に適合しなければなりません:


ParallelForEachBody の要件: 擬似署名、セマンティクス

Body::operator()(ItemType item) const

受信した item を処理します。

Body::operator()(ItemType item, oneapi::tbb::feeder<ItemType> &feeder) const

受信した item を処理します。feeder.add(T) 関数を呼び出して追加の項目を生成できます。


ItemType は、オプションで Body::operator() に参照渡しできます。const および volatile タイプ修飾子も適用できます。

用語

  • iterator は、parallel_for_each アルゴリズムに渡すイテレーターのタイプを決定します。これは、Container テンプレート引数または InputIterator を受け入れるオーバーロードの場合、decltype(std::begin(c)) です。

  • value_type - std::iterator_traits<iterator>::value_type タイプ。

  • reference - std::iterator_traits<iterator>::reference タイプ。

oneapi::tbb::parallel_for_each では、iterator が ISO C++ 標準の [forward.iterators] セクションで説明されている前方イテレーターの要件を満たす場合、整数式である reference タイプのオブジェクトを使用して Body::operator() を呼び出す必要があります。

oneapi::tbb::parallel_for_each アルゴリズムでは、次の要件が満たされる場合、const value_type& または value_type&& タイプのオブジェクトを使用した Body::operator() 呼び出しは整数式である必要があります。

  • イテレーターは、ISO C++ 標準の [input.iterators] セクションで説明される入力イテレーターの要件を満たしています。

  • イテレーターは、ISO C++ 標準の [forward.iterators] セクションで説明される前方イテレーターの要件を満たしていません。

警告

Bodyvalue_type への非 const lvalue 参照のみを受け取る場合、上記の要件に違反するためプログラムは正しく形成されない可能性があります。

feeder::add によって oneapi::tbb::parallel_for_each に送信された追加要素は、右辺値として Body に渡されます。 この場合、対応する Body の実行は、適切に形成されている必要があります。

参照: