限制(AMP)功能类型
restrict(amp) function type
我可以按如下方式创建restrict(amp)
函数:
auto f = [](int& item) restrict(amp) {item += 1;};
我可以在其他restrict(amp)
函数中使用这个函数,例如:
concurrency::parallel_for_each(av.extent,
[=](concurrency::index<1> idx) restrict(amp)
{
f(av[idx]);
}
);
编译后用什么类型的代替了"auto
"?我尝试使用"std::function":
std::function<void (int&) restrict(amp)> f
= [](int& item) restrict(amp) {item += 1;};
但收到编译错误。
感谢您的关注!
lambda 表达式的结果是一个闭包对象,闭包对象的类型是不可知的。只能使用 auto
来声明其确切类型的变量。
但是,您可以将闭包对象转换为合适的std::function
实例,如果 lambda 是非捕获的,您甚至可以将其转换为函数指针。但是,这种转换可能会产生(重大(成本,因此您应该尽可能多地使用auto
来处理实际的闭包类型。
bind
表达式也是如此。
相关标准部分是5.1.2(3(:
lambda 表达式的类型(也是闭包对象的类型(是一种唯一的、未命名的非联合类类型(称为闭包类型(,其属性如下所述。此类类型不是聚合。
也就是说,我不确定特殊的 AMP 扩展在这种情况下的行为如何,可以想象受 AMP 限制的 lambda 不能转换为其他任何东西。我将尝试在 AMP 规范中查找此内容。
更新:AMP 规范的第 2.2.3 和 2.3 节似乎适用于此问题。
相关文章:
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- C++从成员类型中扣除类型的功能模板?
- 这种错误的原因是什么:将"功能"重新定义为不同类型的符号
- 模板功能:根据类型名称进行转换
- 如何在同一个模板功能上专门化几种类型?
- 错误:未知类型名称"功能跟踪"
- 我对C 中共享指针列表进行排序的功能未完成类型
- 共享_ptr中多功能数组的类型是什么
- 确定功能主体中的返回类型
- 为什么BOOST :: HANA :: EXAREMIS ::键入实验功能?类型列表的棘手是什么
- rvalue参考绑定到std ::功能类型的LVALUE
- 我可以创建课堂功能类型吗?
- 获取模板功能函数返回类型的功能类型
- 非分解功能类型可以是非类型参数
- 想要实现将功能类型作为参数的信号模板之类的启动
- 为什么类型扣除会失败(非销售)功能类型
- 限制(AMP)功能类型
- 使用 C++14 的自动功能类型返回扣除代替 std::common_type 是否始终安全?
- 从OpenCV FeatureDetector检索功能类型