如何实例化类的公共成员并将其作为 std::p romise 返回?

How to instantiate public members of a class and return it as a std::promise?

本文关键字:std 返回 romise 实例化 成员      更新时间:2023-10-16

我希望实例化一个类的公共成员并将其作为承诺返回。
这就是我要做的:

class A
{
public:
int x;
};
std::future<A> returnPromiseA(int y)
{
std::promise<A> promise;
promise.x = y; //<- THIS IS INCORECT
return promise;
}

promise.x = y;语法不正确。
赋值的正确语法是什么?

无法通过std::promise访问模板类型的成员。 要在std::promise中设置值,您需要使用set_value函数。

这意味着您的代码应该看起来像

std::future<A> returnPromiseA(int y)
{
std::promise<A> promise;
promise.set_value(A{y}); // construct an A with the desired value and set promises' value to that
return promise;
}

当前C++异步类无法链接延续,因此您必须以其他方式执行此操作:

std::future<A> returnFutureA(int y) {
return std::async([y]{ A retVal; retVal.x = y; return retVal; });
}