从 C++ 中的类启动异步方法

问题描述 投票:0回答:2

我正在使用 C++14,并且想从存储在 unique_ptr 中的类实例启动一个方法。我的代码的一个非常简单的版本如下所示:

class foo {
  void run_server() {
    // Do some stuff.
  }
};

auto ptr = make_unique<foo>();
auto res = std::async(std::launch::async, ptr->run_server());

当我编译代码时出现编译错误,错误消息显示没有匹配项可以调用 async。我认为有一种方法可以使用 lambda 函数启动实例化类的方法,但我不确定这是否是我的情况下的解决方案。任何帮助表示赞赏。 谢谢。

c++ asynchronous
2个回答
1
投票

您可以使用 lambda 来实现此目的,但将 unique_ptr 传递给 lambda 意味着您将其移动到 lambda,然后当 lambda 返回时它会被销毁。

你可以试试这个:

class foo {
public:
    void run_server() {
        // Do some stuff.
    }
};

int somefunc() {
    auto ptr = std::make_unique<foo>();
    auto p = ptr.get();

    auto theasync=std::async( [p]{ std::launch::async, p->run_server() ;});
    //do whatever...
    return 0;
}

0
投票

我实际上通过以下方式调用类的方法解决了这个问题:

auto res = async(launch::async, &foo::run_server, ptr.get());

使用 lambda 的解决方案也可能有效。

© www.soinside.com 2019 - 2024. All rights reserved.