Я пытался использовать transform_reduce из hpx, как указано в Ответе https://stackoverflow.com/a/54481320/11008404, но не могу его скомпилировать.Мой код до сих пор:
#include <hpx/hpx_main.hpp>
#include <hpx/hpx.hpp>
#include <hpx/include/parallel_transform_reduce.hpp>
#include <hpx/include/iostreams.hpp>
#include <vector>
class A {
public:
double residual() {
// Calculate actual local residual
double i = 1.0;
return i;
}
};
int main() {
std::vector<A> vec(300);
double res = hpx::parallel::transform_reduce(hpx::parallel::execution::par,
vec.begin(), vec.end(), // (1)
[](A& a_ref){ return a_ref.residual(); }, // (2)
0, [](double a, double b){ return a + b; }); // (3)
hpx::cout << "residual: " << res << hpx::endl;
return 0;
}
Компилятор выдает следующие ошибки:
hpx.cpp:23:65: error: no matching function for call to ‘transform_reduce(const hpx::parallel::execution::parallel_policy&, std::vector<A>::iterator, std::vector<A>::iterator, main()::<lambda(A&)>, int, main()::<lambda(double, double)>)’
0, [](double a, double b){ return a + b; }); // (3)
.../include/hpx/parallel/algorithms/transform_reduce.hpp:255:22: error: no type named ‘type’ in ‘struct hpx::util::invoke_result<main()::<lambda(double, double)>, A>’
Есть кто-то предложение, что не так или другое решение для вопроса, заданного в Параллельное уменьшение (например, сумма) вектор hpx :: futures ?