C++ 如何使用带有未来向量的基于范围的for循环<;T>;

C++ 如何使用带有未来向量的基于范围的for循环<;T>;,c++,c++11,stdvector,std-future,C++,C++11,Stdvector,Std Future,我有一个程序,它使用std::packaged_task计算不同线程中的一些值。我将通过get_future()从打包任务中获取的std::future存储在向量中(定义为std::vector) 当我计算所有任务的总和时,我使用for循环,它正在工作: //任务的设置 std::矢量结果; //将未来存储在结果中 //每个任务都在自己的线程中执行 整数和{0}; 用于(自动i=0;i

我有一个程序,它使用
std::packaged_task
计算不同线程中的一些值。我将通过
get_future()
从打包任务中获取的
std::future
存储在向量中(定义为
std::vector

当我计算所有任务的总和时,我使用for循环,它正在工作:

//任务的设置
std::矢量结果;
//将未来存储在结果中
//每个任务都在自己的线程中执行
整数和{0};
用于(自动i=0;i
但我宁愿使用基于范围的for循环:

//任务的设置
std::矢量结果;
//将未来存储在结果中
//每个任务都在自己的线程中执行
整数和{0};
用于(常量自动和结果:结果){
sum+=result.get();
}
目前,我收到了一个带有叮当声的编译错误:

program.cxx:83:16: error: 'this' argument to member function 'get' has type 'const std::function<int>', but function is not marked const

       sum += result.get();
              ^~~~~~
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/9.1.0/../../../../include/c++/9.1.0/future:793:7: note: 'get' declared here

       get()
       ^
program.cxx:83:16:错误:成员函数“get”的“this”参数的类型为“const std::function”,但函数未标记为const
sum+=result.get();
^~~~~~
/usr/bin/./lib64/gcc/x86_64-pc-linux-gnu/9.1.0/../../../../../../../include/c++/9.1.0/future:793:7:注意:此处声明了“get”
得到()
^

是否可以与未来的
向量
一起使用?

get
不是
const
,因此您需要非const引用:

for (auto& result : results) {
    sum += result.get();
}

get
不是
const
,因此需要非const引用:

for (auto& result : results) {
    sum += result.get();
}

您需要从(const auto&result:results)
中删除
常量
std::future
不提供编译器试图调用的
get
的const限定版本,因为
result
是对
const std::future
的引用

for (auto& result : results) {
    sum += result.get();
}

执行您想要的操作。

您需要从(const auto&result:results)
中删除
常量
std::future
不提供编译器试图调用的
get
的const限定版本,因为
result
是对
const std::future
的引用

for (auto& result : results) {
    sum += result.get();
}
做你想做的事