用成员函数调用hpx::dataflow
的正确方法是什么?hpx::async
可以正常工作,但我们不知道为什么hpx::dataflow
无法编译。
#include <hpx/hpx_main.hpp>
#include <hpx/hpx.hpp>
#include <memory>
class A {
public:
A& do_work(double x, const A& y, const A& z) {
i = x + y.i + z.i;
return *this;
}
double i = 1.0;
};
int main() {
// Create instances
std::vector<std::unique_ptr<A>> vec;
for (int i = 0; i < 3; ++i) {
vec.emplace_back( std::make_unique<A>() );
}
std::vector<hpx::shared_future<A&>> a1(3);
std::vector<hpx::shared_future<A&>> a2(3);
// works
a1[1] = hpx::async( &A::do_work, vec[1].get(), 1.0, *vec[0], *vec[2] );
// compiler error here
a2[1] = hpx::dataflow( hpx::util::unwrapping_all( &A::do_work ),
vec[1].get(), 2.0, a1[0], a2[0] );
return 0;
}
编译器错误说:
hpx.cpp:29:100: required from here
.../hpx/hpx/traits/get_remote_result.hpp:25:20: error: invalid cast from type ‘std::remove_reference<A&>::type’ {aka
‘A’} to type ‘A*’ return Result(std::move(rhs));
所使用的HPX版本是带有GCC 8.1的1.2.0。
最佳答案
在我看来,这似乎是个错误。我在存储库上为此创建了一个问题:https://github.com/STEllAR-GROUP/hpx/issues/3639。
关于c++ - hpx::dataflow和成员函数的编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54390555/