как std :: future реализует ожидаемый интерфейс
Что касается C ++ 20, то не . C ++ 20 предоставляет co_await
и его сопутствующие языковые функциональные возможности, но не предоставляет никаких реальных ожидаемых типов.
Как std::future
может реализовать ожидаемый интерфейс, в основном то же самое как std::experimental::future
из Concurrency TS реализует future::then
. then
принимает функцию для продолжения, когда становится доступным значение future
. Возвращаемое значение then
- это новое future<U>
(старое future<T>
теперь перестает функционировать), где U
- это новое значение, которое возвращает данная функция продолжения. У этого нового future
будет U
доступным только тогда, когда доступно исходное значение и когда продолжение обработало его в новое значение. В таком порядке.
Точные детали того, как работает .then
, полностью зависят от того, как реализован future
. И это может зависеть от того, как спецификации c future
были созданы , так как future
s из std::async
имеют специальные свойства, которые другие future
s не имеют.
co_await
только делает этот процесс намного более удобочитаемым визуально. co_await
способное будущее просто толкнет ручку сопрограммы в future::then
, тем самым изменив future
.