promise_type - объекта, который хранит состояние и связывает кадр с типом результата.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpCrPm 579 of 696 menu
◀ ▶

Тип обещания в C++

Компилятор строит сопрограмму вокруг вложенного promise_type - объекта, который хранит состояние и связывает кадр с типом результата.

Минимальный набор включает get_return_object, initial_suspend, final_suspend, unhandled_exception и либо return_void, либо return_value под выбранный способ завершения. Для co_yield добавляют yield_value. Запишем все эти методы в одном типе и выведем маркер из тела:

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

Строка "run" появляется только после resume, потому что initial_suspend настроен на std::suspend_always.

Перечислите в комментарии к своему promise_type пять обязательных методов и реализуйте их для сопрограммы с co_return.

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