Какова фактическая реализация co_await в совместной подпрограмме c ++ 20

Я изучаю сопрограммы на C ++ 20.

Пытаюсь понять, как работает co_await.

Есть какая-то реализация co_await.

Читая, co_wait, похоже, ведет себя как future / prom.

Когда функция / объект вызывается с co_wait внутри потока, вызывается что-то вроде этого

auto promise = std::promise<std::string>();
auto future = promise.get_future();
void sleep()
{
     std::cout << future.get() << std::endl;
}

Когда вызывается уведомление, другой поток вызывает что-то вроде этого

void wakeup()
{
     promise.set_value("Hello World");
}

person getsoubl    schedule 14.04.2020    source источник
comment
cppreference's doc.   -  person Jarod42    schedule 14.04.2020
comment
Я дал подробный ответ по ссылке ниже. stackoverflow.com/ questions / 57621168 /   -  person doron    schedule 16.05.2020


Ответы (1)


Например TYPE a = co_await awaitable(args), вроде как развернуть вот так:

    {
        auto && tmp = awaitable(args);
        if (!tmp.await_ready())
        {
            tmp.await_suspend(*this);
        }
        ret = tmp.await_resume();
    };
person Eric Morris    schedule 16.05.2020