hpx::dataflow 和成员函数的编译错误

Posted

技术标签:

【中文标题】hpx::dataflow 和成员函数的编译错误【英文标题】:Compilation error with hpx::dataflow and member function 【发布时间】:2019-01-27 16:56:27 【问题描述】:

使用成员函数调用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 版本是 1.2.0 和 GCC 8.1。

【问题讨论】:

编译器还会准确说明发生在哪一行,所以不要忽略关键信息! 【参考方案1】:

这对我来说似乎是一个错误。我为此在存储库中创建了一个问题:https://github.com/STEllAR-GROUP/hpx/issues/3639。

【讨论】:

我已经创建了一个拉取请求来解决这个问题:github.com/STEllAR-GROUP/hpx/pull/3640。再次感谢您的报告。 感谢您的快速答复和修复!

以上是关于hpx::dataflow 和成员函数的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

Qt5:错误:“WA_LockPortraitOrientation”不是“Qt”的成员

在构造函数中调用的成员变量的析构函数 - 编译器错误?

C ++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)[重复]

解决由于具有可能已删除的默认构造函数的不变成员而导致的编译器错误

MFC C++ 使用静态成员和编译问题

小于运算符不能作为成员函数重载