std :: async与类成员函数

时间:2018-02-18 23:20:35

标签: c++ multithreading std


我是std::async的新手,我在理解它是如何工作方面遇到了问题。我看到了如何将成员函数传递到Web上某处的std::async的示例,但似乎没有编译。问题出在这里?没有lambda怎么办呢?

class Test {
  std::future<void> f;
  void test() {}
  void runTest() {
    // ERROR no instance overloaded matches argument list
    f = std::async(std::launch::async, &Test::test, this); 

    // OK...
    f = std::async(std::launch::async, [this] {test();}); 
  }
  void testRes() {
    f.get();
  }
};

1 个答案:

答案 0 :(得分:0)

您应该能够使用std :: bind来创建一个可调用的函数对象:

f = std::async(std::launch::async, std::bind(&Test::test, this));

在您的示例&amp; Test :: test中,不是一个带有Test类型参数的函数,正如std::async所期望的那样。相反,它是成员函数,必须以不同方式调用。