std::predicate
std::predicate (술어 개념)
R이 Args... 인자들에 대해 호출 가능하고 그 결과가 bool로 변환 가능한 관계인지를 명세하는 개념(concept)이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class F, class... Args >
concept predicate =
std::regular_invocable<F, Args...> &&
__BooleanTestable<std::invoke_result_t<F, Args...>>;
개념 predicate<F, Args...>는 F가 인자들 Args...로 호출 가능하고(regular_invocable), 그 호출 결과가 bool로 사용될 수 있는(boolean-testable) 타입임을 명세해요.
즉 F는 인자들을 받아 참/거짓을 판정하는 함수 객체여야 해요. std::sort의 비교 함수, std::find_if의 단항 술어, std::all_of의 조건 함수 등 표준 알고리즘의 조건자가 요구하는 핵심 개념이에요.
boolean-testable은 bool뿐 아니라 명시적으로 bool로 변환 가능한 타입(예: std::integral 값 또는 포인터)이나 조건부 문맥에서 쓰일 수 있는 타입까지 포함해요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.7.7 Concept predicate [concept.predicate]
- C++20 표준 (ISO/IEC 14882:2020): 18.7.7 Concept predicate [concept.predicate]
알고리즘의 조건자 인자를 제약할 때 이 개념을 써서 함수 객체가 반드시 참/거짓을 판정하도록 보장할 수 있어요.