繁体   English   中英

与std :: accumulate一起使用async

[英]Using async with std::accumulate

我认为这会更简单,但尝试了以下的许多变化,我无法编译这个代码

#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)'

我错过了什么?

因为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); });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM