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] セクションで説明される前方イテレーターの要件を満たしていません。
警告
Body
が value_type
への非 const lvalue 参照のみを受け取る場合、上記の要件に違反するためプログラムは正しく形成されない可能性があります。
feeder::add
によって oneapi::tbb::parallel_for_each
に送信された追加要素は、右辺値として Body
に渡されます。 この場合、対応する Body
の実行は、適切に形成されている必要があります。
参照: