如何将基于范围的 for 循环与未来的<T>向量一起使用
How to use a range-based for loop with a vector of future<T>
我有一个程序,可以使用std::packaged_task<int()>
计算不同线程中的一些值。我将通过get_future()
从打包任务中获得std::future
存储在向量中(定义为std::vector<std::future<int>>
)。
当我计算所有任务的总和时,我使用 for 循环并且它正在工作:
// set up of the tasks
std::vector<std::future<int>> results;
// store the futures in results
// each task execute in its own thread
int sum{ 0 };
for (auto i = 0; i < results.size; ++i) {
sum += results[i].get();
}
但我宁愿使用基于范围的 for 循环:
// set up of the tasks
std::vector<std::future<int>> results;
// store the futures in results
// each task execute in its own thread
int sum{ 0 };
for (const auto& result : results) {
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()
^
是否可以使用vector
为future<int>
的基于范围的 for 循环?
您需要从for (const auto& result : results)
中删除const
。std::future
不提供编译器尝试调用的get
的 const 限定版本,因为result
是对const std::future
的引用。
for (auto& result : results) {
sum += result.get();
}
做你想做的事。
get
不是const
,所以你需要非常量引用:
for (auto& result : results) {
sum += result.get();
}
相关文章:
- 在Linux中哪里可以找到互斥、未来等的源代码
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- <<操作员在下面的行中工作
- 使用 std::string () const 函数启动线程或未来
- QVTKWidget在VTK 8.1中已弃用,并将在未来的版本中删除
- 如何在不设置值的情况下通知 c++ 未来?
- C++ 未解析的标识符未来
- 未来值公式显示疯狂巨大数字的输出
- 未来由函数返回
- 函数范围的静态变量如何导致与共享库中函数代码的未来使用不兼容
- 无法调用未来::获取存储在地图中的未来
- 如何显式调用运算符<<
- 未来C++标准支持"Declaring type template parameters with auto"
- 是否有一些东西限制了未来引入多个返回值C++标准?
- 为什么是标准::未来不阻塞
- C++发布版本中的未来错误值
- 为什么C++线程/未来开销如此之大