私は現在、ライブラリを作成中です。ユーザーが関数 ( として宣言restrict( amp )
) を定義できるようにし、この関数をライブラリ関数の 1 つに渡してconcurrency::parallel_for_each
ループ内で使用できるようにしたいと考えています。例えば:
template <typename T, typename Func>
void Foo( const concurrency::array_view<const T>& avParam, Func f )
{
concurrency::array<T, 1> arrResult( avParam.extent );
concurrency::parallel_for_each( avParam.extent, [=, &arrResult]( concurrency::index<1> index ) restrict(amp) {
arrResult[index] = f( avParam[index] );
} );
// Do stuff...
}
関数ポインターをカーネル内の関数自体に直接f
置き換えるかのように、有効な AMP 互換関数として宣言されている場合、これが機能することを期待します。f
すべてが期待どおりに機能します。ただし、使用f
すると次のエラーが発生します。
関数ポインター、関数参照、またはメンバー関数へのポインターはサポートされていません。
ユーザーがラムダ以外のファンクターを使用できないようにすることなく、目的の動作を得る方法はありますか?