如何使用带有 future<T> 向量的基于范围的 for 循环
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();
}
目前我收到 clang 的编译错误:
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()
^
是否可以将 Range-based for loop 与 vector
的 future<int>
一起使用?
get
不是const
,所以你需要non-const个参考文献:
for (auto& result : results) {
sum += result.get();
}
您需要从 for (const auto& result : results)
中删除 const
。 std::future
不提供编译器试图调用的 get
的 const 限定版本,因为 result
是对 const std::future
.
的引用
for (auto& result : results) {
sum += result.get();
}
做你想做的。
我有一个程序可以使用 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();
}
目前我收到 clang 的编译错误:
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()
^
是否可以将 Range-based for loop 与 vector
的 future<int>
一起使用?
get
不是const
,所以你需要non-const个参考文献:
for (auto& result : results) {
sum += result.get();
}
您需要从 for (const auto& result : results)
中删除 const
。 std::future
不提供编译器试图调用的 get
的 const 限定版本,因为 result
是对 const std::future
.
for (auto& result : results) {
sum += result.get();
}
做你想做的。