함수처럼 호출되는 것들은 “상태를 담을 수 있는가”로 갈린다

STL 알고리즘의 비교자·조건자·변환 함수 자리에는 여러 callable을 넣을 수 있습니다. 차이는 상태, 타입 정보, 재사용 범위입니다.

일반 함수

이름이 있고 재사용이 쉽지만 호출마다 상태를 담기 어렵습니다.

bool lessAge(a,b);
함수 객체

operator()와 멤버 변수로 상태를 보관합니다.

CompareBy("name")
람다

짧은 함수 객체를 즉석에서 만듭니다. 캡처로 상태를 가집니다.

[limit](int x){...}
std::function

서로 다른 callable을 한 타입으로 저장하지만 간접 호출 비용이 있습니다.

std::function<bool(int)>
이 절의 핵심: “함수처럼 부른다”보다 “상태가 필요한가, 이름 붙여 재사용할 것인가”를 먼저 봅니다.