我以为这会更简单,但是尝试了以下内容的许多变体后,我无法编译此代码
#include <thread>
#include <algorithm>
#include <future>
int main()
{
std::vector<int> vec(1000000, 0);
std::future<int> x = std::async(std::launch::async, std::accumulate, vec.begin(), vec.end(), 0);
}
error: no matching function for call to 'async(std::launch, <unresolved overloaded function type>, std::vector<int>::iterator, std::vector<int>::iterator, int)'
我想念什么?
答案 0 :(得分:4)
由于std::accumulate
是一个模板,因此在获取其地址之前,必须提供模板参数(以将其解析为特定功能)。
#include <thread>
#include <algorithm>
#include <future>
#include <vector>
#include <numeric>
int main()
{
std::vector<int> vec(1000000, 0);
std::future<int> x = std::async(std::launch::async,
&std::accumulate<std::vector<int>::const_iterator, int>,
vec.begin(), vec.end(), 0);
}
有点讨厌,所以您可以改用lambda:
std::future<int> x = std::async(std::launch::async,
[&]{ return std::accumulate(vec.begin(), vec.end(), 0); });