Saj*_*jal 4 c++ templates c++11
我试图了解其用途std::async
.我在下面写了模板函数来累积整数数组中的所有条目.
template<typename T, int N, typename = std::enable_if<std::is_integral<T>::value>::type>
T parallel_sum(T(&arr)[N], size_t start = 0, size_t end = N - 1) {
if (end - start < 1000) {
return std::accumulate(std::begin(arr) + start, std::begin(arr) + end + 1, 0);
}
else {
size_t mid = start + (end - start) / 2;
auto res1 = std::async(std::launch::async, parallel_sum<T, N>, arr, start, mid);
auto res2 = parallel_sum(arr, mid + 1, end);
return res2 + res1.get();
}
}
Run Code Online (Sandbox Code Playgroud)
当我在main中调用上面的函数时,我得到以下编译错误(以及更多):
错误C2672:'std :: async':找不到匹配的重载函数
为什么我收到此错误?怎么修好?
lll*_*lll 14
您应该使用std::ref
保留引用语义.
改变是行:
auto res1 = std::async(std::launch::async, parallel_sum<T, N>, arr, start, mid);
Run Code Online (Sandbox Code Playgroud)
至:
auto res1 = std::async(std::launch::async, parallel_sum<T, N>, std::ref(arr), start, mid);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
314 次 |
最近记录: |