이번 C++ 20에서 가장 기대했던 기능이라서 책도보고 인터넷 검색도 계속하면서 공부를 해본 결과 현재로썬 쉽게 사용하기는 힘들 것 같다...
회사 프로젝트에 적용하기에는 위험 부담이 있다... (디버깅이 너무 힘들 것 같다...)
아마도 코루틴을 이용하는 디자인 패턴이 좀 나오면서 정리가 되면 그때 사용하게 되지 않을까...? 하는 생각이 들 정도이다.
유니티를 하면서 코루틴이라는 개념을 처음 접했었는데 개념 자체는 크게 다르진 않은 것 같다.
코루틴의 개념은 이 포스팅에서 잘 설명을 해주고 있다.
(https://m.post.naver.com/viewer/postView.naver?volumeNo=33676443&memberNo=559061)
하지만 사용하기 위해서 준비를 많이 해야되는 부분은 불편해보인다.
다른 언어와 달리 C++은 기본적으로 Framework이 존재하지 않는다.
항상 사용자가 만들어서 사용을하든, 다른 라이브러리를 사용하든 어쨋든 간에 별도의 Framework을 생성해야만 한다.
그래서 이러한 준비(약속)가 필요하다.
가장 기본적으로 필요한 것은 promise_type이다.
struct promise_type
{
// 코루틴의 객체를 반환한다.
CoroutineObject get_return_object() { return {}; }
// 코루틴이 실행 전에 멈춰있어야하는지 확인
std::suspend_never initial_suspend() const noexcept { return {}; }
// 코루틴이 종료 전에 멈춰있어야하는지 확인
std::suspend_never final_suspend() const noexcept { return {}; }
// co_return에 의해 호출 (코루틴이 무한 루프로 종료되지 않는다면 불필요)
void return_void() { }
// co_return val에 의해 호출됨
void return_value(T value) { *_ptr = value; }
// co_yield에 의해 호출
std::suspend_always yield_value(const T value) { _value = value; return {}; }
// 예외 발생
void unhandled_exception() { }
};
C++에서의 코루틴 promise_type이라는 객체를 만들어서 커스터마이징을 해야되고, 이것을 이용해서 우리가 아는 코루틴의 개념에 맞게 직접 구현해야한다.
구현 내용이 너무 길기 때문에 그냥 다른 포스팅으로 대체한다.
https://openmynotepad.tistory.com/65
https://openmynotepad.tistory.com/66
https://openmynotepad.tistory.com/67
'Basic Programming > C++ 20' 카테고리의 다른 글
C++20 - 지정된 초기화 (Designated Initialization) (1) | 2023.12.17 |
---|---|
C++20 - 삼항 비교 연산자(Three-Way Comparison) (0) | 2023.12.17 |
C++20 - Ranges (0) | 2023.12.10 |
C++20 - Module (0) | 2023.12.10 |
C++20 - Concepts (0) | 2023.12.10 |