我正在使用 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 函数启动实例化类的方法,但我不确定这是否是我的情况下的解决方案。任何帮助表示赞赏。 谢谢。
您可以使用 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;
}
我实际上通过以下方式调用类的方法解决了这个问题:
auto res = async(launch::async, &foo::run_server, ptr.get());
使用 lambda 的解决方案也可能有效。