无法异步启动带有对象参数的函数



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

#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的实例与参数列表匹配。

包含Fuller代码可能会有所帮助。例如,我立即看到一些问题:

  • 您的班级声明不会在结束后的分子之后
  • 您正在重新定义变量'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
}

剪切显示错误中的代码,班级声明结束时缺少半分号。它在G 版本7.3

中没有错误编译

相关内容

  • 没有找到相关文章

最新更新