请考虑以下示例:
#include <iostream>
#include <future>
std::size_t calc_something(std::size_t lim_)
{
std::size_t result = lim_ * 10;
return result;
}
void calc_something(std::size_t lim_, std::promise<std::size_t> &promise_)
{
std::size_t result = lim_ * 10;
promise_.set_value(result);
}
void async_calc()
{
std::future<std::size_t> async_calc = std::async(calc_something, 5);
std::cout<< "async_calc = " << async_calc.get() <<std::endl;
}
我对多线程仍然很陌生,但是为什么 - 在地球上 - 不能std::async
选择正确的重载?第二个重载使用对std::promise
对象的引用。
我在这里看过这个问题,但没有解释为什么。此外,我没有收到歧义错误。
我得到的错误是:
error: no matching function for call to 'async' std::future<std::size_t> async_calc = std::async(calc_something, 5);