호출 가능 값 선택 기준

호출 객체 선택 기준

함수 객체, 람다, 함수 포인터, std::function은 모두 호출되지만 상태 저장, 타입 노출, 비용이 다릅니다.

짧은 현장 조건알고리즘 호출 근처에서만 쓰면 람다가 가장 읽기 쉽습니다.
재사용 정책비교 기준이 이름을 가져야 하면 함수 객체나 별도 함수가 적합합니다.
functor

상태를 멤버로 보관합니다

operator()를 가진 객체는 기준값, 누적값 같은 상태를 명확히 가집니다.

lambda

주변 값을 캡처합니다

짧은 조건식과 지역 문맥을 알고리즘 호출부에 가까이 둘 수 있습니다.

function

타입을 지워 보관합니다

std::function은 다양한 호출 대상을 담지만 간접 호출 비용을 고려합니다.

정렬 비교같은 입력에 항상 같은 순서를 반환해야 합니다.
캡처 방식참조 캡처는 대상 수명이 람다보다 오래 유지되는지 확인합니다.
성능 경로템플릿 인수로 받으면 인라인 최적화 가능성이 커집니다.

상태 전달 호출 가능한 객체의 차이는 문법 모양보다 “상태를 어디에 두고 얼마나 오래 쓸 것인가”에서 갈립니다.