std::coroutine_handle
std::coroutine_handle (코루틴 핸들)
코루틴 프레임을 가리키는 비소유(non-owning) 핸들 타입이에요. 코루틴의 상태를 재개(resume), 파괴(destroy)하거나 그 상태를 조회하는 데 쓰여요. C++20 코루틴 지원의 핵심 타입이에요.
출처: cppreference
본문
<coroutine> 헤더에 정의돼 있고, 코루틴을 가리키는 핸들이에요.
template< class Promise = void >
struct coroutine_handle;
std::coroutine_handle<Promise>는 특정 promise 타입을 가진 코루틴 프레임을 가리키는 핸들이에요. 기본값인 std::coroutine_handle<>는 promise 타입을 신경 쓰지 않는 일반적인 핸들이에요. 핸들은 지정된 코루틴의 promise 객체에 접근하거나, 코루틴을 재개·파괴하거나, 완료 여부를 확인하는 기능을 제공해요.
멤버 함수:
operator()/resume(): 코루틴을 재개(re)개요. 코루틴이 최초 실행이면 본문을 시작하고, 일시 중단 상태였다면 해당 지점에서 계속 이어서 실행해요. 이미 완료된 코루틴을 재개하는 것은 정의되지 않은 동작이에요.destroy(): 코루틴 프레임을 파괴하고 promise 객체를 소멸시켜요.done(): 코루틴이 완료(종료 상태)되었는지 확인해요.promise(): 코루틴 프레임에 저장된 promise 객체에 대한 참조를 돌려줘요 (Promise가void가 아닐 때).from_promise(Promise&): promise 객체의 참조로부터 핸들을 얻어요.address(): 코루틴 프레임을 가리키는 주소(포인터로 캐스팅 가능한 값)를 돌려줘요.from_address(void*): (중단된) 주소로부터 핸들을 재구성해요.operator==/operator!=: 두 핸들이 같은 코루틴을 가리키는지 비교해요.operator bool: 핸들이 비어 있지 않은지 확인해요.hash(std::coroutine_handle): 해시 특수화 지원 (std::hash와 함께).
점프 테이블(jump tables)을 위한 operator new·operator delete 오버로드도 있어요. 핸들은 기본 생성 시 빈 상태이며, std::noop_coroutine()이 돌려주는 핸들은 파괴해선 안 돼요.
coroutine_handle은 코루틴을 스케줄링하거나 파괴하는 로우레벨 제어에 쓰여요. 일반적인 고수준 코루틴 라이브러리(예: task, generator)도 내부에서 이 핸들을 사용해요.