- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我可以创建 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):
The type of the lambda-expression (which is also the type of the closure object) is a unique, unnamed non-union class type — called the closure type — whose properties are described below. This class type is not an aggregate.
也就是说,我不确定特殊的 AMP 扩展在此上下文中的行为如何,并且可以想象 AMP 限制的 lambda 不能转换为其他任何东西。我会尝试在 AMP 规范中查找它。
更新 AMP Specification 的第 2.2.3 和 2.3 节似乎适用于这个问题。
关于c++ - 限制(放大器)功能类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10480359/
示例链接:http://cinema.popcorntv.it/amp/news/una-mamma-per-amica-un-indizio-conferma-che-luke-e-lorelai/
以下代码编译失败。错误信息是: 错误一: error C3930: 'foo' : no overloaded function has restriction specifiers that are
我可以创建 restrict(amp) 函数如下: auto f = [](int& item) restrict(amp) {item += 1;}; 而且我可以在其他restrict(amp) 函
我正在学习有关为 iOS 创建天气应用程序的教程。一段时间后,我遇到了一个错误,即 dispatch_once(&onceToken, ^{ use of undeclared identifier
在 C++ AMP 中,内核函数或 lambda 被标记为 restrict(amp),这对允许的 C++ 子集 ( listed here ) 施加了严格的限制。 CUDA 是否允许在内核函数中对
这不是一个编程问题,而是相关的,并且我无法在其他任何地方找到有关信息。希望能采纳。 我正在尝试移植 C++ AMP 应用程序以在 Surface 2 平板电脑上运行。由于 C++ AMP 在平板电脑上
我有一个经常被调用的函数,它非常适合并行处理,所以我研究了 C++ 放大器作为初学者。该函数接受三个输入: 一个浮点 vector ,它是输入数据 常系数 vector ,在整个调用过程中保持不变 一
我想在我的第一个 AMP 项目中解决这个问题, 这是我遇到的问题: 错误.js:58: Origin of must not be equal to container 这是我的 index.htm
我正在尝试更改 amp-accordion 中标题的背景颜色。我能够做到这一点的唯一方法是将样式应用于 .-amp-accordion-header这是无效的。 最佳答案 如果您尝试覆盖类 .-amp
我尝试分析与英特尔 OpenMP 和英特尔 Composer XE 2014 并行化的 C++ 程序的扩展行为。当我运行“高级热点分析”时,我得到的结果是,一个名为“kmp print storage
我是一名优秀的程序员,十分优秀!