Я хочу создать экземпляр публичных членов класса и вернуть его как обещание.
Вот что я пытаюсь сделать:
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;
неверный синтаксис
Какой правильный синтаксис для присваивания?
Текущие асинхронные классы C ++ не могут связывать продолжения, поэтому вам придется сделать это другим способом:
std::future<A> returnFutureA(int y) {
return std::async([y]{ A retVal; retVal.x = y; return retVal; });
}
Вы не можете получить доступ к членам типа шаблона через 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;
}