ranges::fold 개념들
ranges::fold 개념들 (폴드 제약 개념)
ranges 폴드(fold) 알고리즘들이 쓰는 개념(concept)들을 모아둔 페이지예요. <algorithm> 헤더, C++23부터.
출처: cppreference
본문
C++23에서 추가된 std::ranges 폴드 알고리즘(fold_left, fold_right 등)의 타입 제약을 설명하는 개념들이에요.
주요 개념:
indirectly_binary_left_foldable/indirectly_binary_right_foldable: 폴드에 쓰이는 이진 연산과 반복자·초기값의 호환성을 제약해요. 반복자가 가리키는 요소 타입과 누적 타입이 연산에 적합한지 컴파일 타임에 검사해요.
예를 들어 fold_left는 초기값 init과 범위 요소를 이진 연산 op로 결합하는데, 이때 op(acc, *it)가 유효한 타입이 되어야 해요. 이런 요구사항을 개념으로 표현한 것이 위 폴드 가능(foldable) 개념들이에요.
구체적인 개념:
indirectly_binary_left_foldable<I, T>:I가 input 반복자이고,T(누적 타입)로 왼쪽 폴드가 가능한지.indirectly_binary_right_foldable<I, T>: 오른쪽 폴드가 가능한지.
이 개념들은 사용자가 직접 쓰기보다, std::ranges::fold_left 같은 알고리즘의 시그니처 제약으로 내부적으로 사용돼요. 폴드 연산을 일반화할 때 참고하면 돼요.