본문으로 바로가기

C++20) Coroutine ( 코루틴 ) - 3

category C++/Modern 2020. 8. 23. 23:33

co_yield 사용하기

 

co_yield는 Coroutine의 유용한 키워드이며 일부 값을 반환하지만, 코루틴을 종료시키지 않을 때 사용됩니다.

일반적인 사용 방법은 "특정 유형의 Generator ( 또는 발생기 )"를 생성할 때 사용됩니다.

 

일단 간단한 Generator 함수를 작성하도록 합니다.

 

Error가 발생하는 것은 당연합니다.

promise_type에 co_yield 키워드에 맞는 함수를 선언 & 정의 하여야합니다.

실제 컴파일러가 co_yield를 만날 때 다음과 같은 코드가 생성됩니다.

 

따라서 promise_type에 yield_value를 추가해야 합니다. co_await가 누락되어있으나, 다음 글에서 다루겠습니다.

const char* type에 따라 선언 & 정의된 promise_type은 다음과 같습니다.

 

실제로 Generator을 통해 생성된 정보에 접근할 수 있어야 하는데, 역시나 coroutine_handle의 promise에 접근합니다.

우리의 resumable 클래스에 다음과 같은 함수를 선언 & 정의 합니다.

 

auto -> const char* 는 리턴타입을 가독성있게 보여주기 위해서일뿐, const char* 로 변경하여도 상관 없습니다.

 

main 함수를 다음과 같이 수정합니다.

 

 

오류없이 실행됐다면, 결과는 다음과 같습니다.

 

 

아직 Coroutine에 대한 정보가 끝이 아니며, await 정보와 함께 추후 추가됩니다.