在C++中从类中启动asyc方法

hrirmatl  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(82)

我使用的是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());

字符串
我得到编译错误,当我编译我的代码和错误消息说,有没有匹配到调用blog.我认为有一种方法来启动一个示例化的类的方法使用lambda函数,但我不知道如何或是否这是一个解决方案,在我的情况.任何帮助是感激.谢谢.

xxslljrj

xxslljrj1#

你可以使用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;
}

字符串

oaxa6hgo

oaxa6hgo2#

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

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

字符串
使用lambda的解决方案也可以工作。

相关问题