yield_value принимает значение из co_yield и обычно кладет его в поле обещания для внешнего кода. После resume на точке отдачи поле уже заполнено.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpCrYv 583 of 696 menu
◀ ▶

Прием отданного значения в C++

Метод yield_value принимает значение из co_yield и обычно кладет его в поле обещания для внешнего кода.

После resume на точке отдачи поле уже заполнено, и его можно вывести, не заглядывая внутрь тела. Запишем одну отдачу и прочитаем current из обещания:

#include <coroutine> #include <iostream> struct hold { struct promise_type { int current = 0; hold get_return_object() { return hold{ std::coroutine_handle<promise_type>::from_promise(*this)}; } std::suspend_always initial_suspend() { return {}; } std::suspend_always final_suspend() noexcept { return {}; } std::suspend_always yield_value(int value) { current = value; return {}; } void return_void() {} void unhandled_exception() { std::terminate(); } }; std::coroutine_handle<promise_type> h; explicit hold(std::coroutine_handle<promise_type> handle) : h(handle) {} ~hold() { if (h) { h.destroy(); } } }; static hold once() { co_yield 11; } int main() { hold job = once(); job.h.resume(); std::cout << job.h.promise().current << "\n"; while (!job.h.done()) { job.h.resume(); } return 0; }

Число попадает в current внутри yield_value еще до того, как управление вернется в main.

Отдайте через co_yield число 6, сохраните его в поле обещания и выведите после resume.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить