행동을 값 생성
정렬 기준이나 필터 조건을 객체로 넘기면 알고리즘은 데이터와 정책을 분리해 실행한다.
람다와 functor는 함수처럼 호출되지만 객체이기도 하다. 비교자, predicate, 전략 객체에 상태를 담을 수 있어 알고리즘과 컨테이너의 행동을 바꾼다.
정렬 기준이나 필터 조건을 객체로 넘기면 알고리즘은 데이터와 정책을 분리해 실행한다.
threshold나 설정값이 필요한 predicate는 멤버 변수로 명확히 보관한다.
람다 참조 캡처가 알고리즘 호출 이후에도 저장되는지, 컨테이너 비교자로 남는지 확인한다.
struct AtLeast {
int limit;
bool operator()(int value) const { return value >= limit; }
};
auto count = std::count_if(scores.begin(), scores.end(), AtLeast{80});