У меня есть программа, которая вычисляет некоторые значения в разных потоках с std::packaged_task<int()>
. Я сохраняю std::future
, полученную из упакованных задач через get_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()
^
Можно ли использовать на основе диапазона для цикла с vector
из future<int>
?