我目前正在编写一个库,我希望能够允许用户定义一个函数(声明为restrict( amp )
)并允许他们将此函数传递给我的一个库函数以在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
会导致以下错误:
不支持函数指针、函数引用或指向成员函数的指针。
有什么方法可以在不阻止我的用户使用 lambdas 以外的函子的情况下获得我想要的行为?