co_yield 사용하기
co_yield는 Coroutine의 유용한 키워드이며 일부 값을 반환하지만, 코루틴을 종료시키지 않을 때 사용됩니다.
일반적인 사용 방법은 "특정 유형의 Generator ( 또는 발생기 )"를 생성할 때 사용됩니다.
일단 간단한 Generator 함수를 작성하도록 합니다.
promise_type에 co_yield 키워드에 맞는 함수를 선언 & 정의 하여야합니다.
실제 컴파일러가 co_yield를 만날 때 다음과 같은 코드가 생성됩니다.
따라서 promise_type에 yield_value를 추가해야 합니다. co_await가 누락되어있으나, 다음 글에서 다루겠습니다.
const char* type에 따라 선언 & 정의된 promise_type은 다음과 같습니다.
실제로 Generator을 통해 생성된 정보에 접근할 수 있어야 하는데, 역시나 coroutine_handle의 promise에 접근합니다.
우리의 resumable 클래스에 다음과 같은 함수를 선언 & 정의 합니다.
main 함수를 다음과 같이 수정합니다.
오류없이 실행됐다면, 결과는 다음과 같습니다.
아직 Coroutine에 대한 정보가 끝이 아니며, await 정보와 함께 추후 추가됩니다.
'C++ > Modern' 카테고리의 다른 글
C++20) Concepts ( 콘셉트, 개념 ) - 2 (0) | 2020.11.27 |
---|---|
C++20) Concepts ( 콘셉트, 개념 ) - 1 (0) | 2020.11.25 |
C++20) Coroutine ( 코루틴 ) - 2 (0) | 2020.08.21 |
C++20) Coroutine ( 코루틴 ) - 1 (0) | 2020.08.20 |
C++20) Designated Initializer ( 지정된 초기화 ) (0) | 2020.08.19 |