Как создать открытые члены класса и вернуть его как std :: обещание?

Я хочу создать экземпляр публичных членов класса и вернуть его как обещание.
Вот что я пытаюсь сделать:

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; неверный синтаксис
Какой правильный синтаксис для присваивания?

0

Решение

Текущие асинхронные классы C ++ не могут связывать продолжения, поэтому вам придется сделать это другим способом:

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

Другие решения

Вы не можете получить доступ к членам типа шаблона через 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;
}
2

По вопросам рекламы [email protected]