-1

如何将对象传递给异步启动的函数?

#include <future>
#include <thread>

class SomeObject
{
    void Dummy();
}

class A
{
    public:
      void Test1();
      void Test2(SomeObject o);
      void Test3(SomeObject &o);
}      

A a;
auto a = std::async(std::launch::async, &A::Test1, a);  // OK

SomeObject o;
auto b = std::async(std::launch::async, &A::Test2, a, o);  // ERROR
auto c = std::async(std::launch::async, &A::Test3, a, std::ref(o));  // ERROR

函数 T1 启动时没有错误。Test2 和 Test3 需要一个对象参数,但我得到了错误:没有重载函数的实例 std::async 与参数列表匹配。

4

2 回答 2

1

包含更完整的代码可能会有所帮助。例如,我马上就发现了一些问题:

  • 您的类声明在右大括号后没有分号
  • 您正在重新定义变量“a”

以下更正的代码在 VS 2017 中编译没有错误(不需要 c++17):

#include <future>
#include <thread>

class SomeObject
{
    void Dummy();
};

class A
{
public:
    void Test1();
    void Test2(SomeObject o);
    void Test3(SomeObject &o);
};

void func()
{
    A a;
    auto d = std::async(std::launch::async, &A::Test1, a);  // OK

    SomeObject o;
    auto b = std::async(std::launch::async, &A::Test2, a, o);  // OK
    auto c = std::async(std::launch::async, &A::Test3, a, std::ref(o));  // OK
}
于 2019-03-08T03:45:32.797 回答
0

截图显示错误中的代码,类声明末尾缺少分号。并且在 g++ 7.3 版中编译没有错误

于 2019-03-08T04:02:31.893 回答