함수처럼 호출되는 것들은 “상태를 담을 수 있는가”로 갈린다
STL 알고리즘의 비교자·조건자·변환 함수 자리에는 여러 callable을 넣을 수 있습니다. 차이는 상태, 타입 정보, 재사용 범위입니다.
일반 함수
이름이 있고 재사용이 쉽지만 호출마다 상태를 담기 어렵습니다.
bool lessAge(a,b);
함수 객체
operator()와 멤버 변수로 상태를 보관합니다.
CompareBy("name")
람다
짧은 함수 객체를 즉석에서 만듭니다. 캡처로 상태를 가집니다.
[limit](int x){...}
std::function
서로 다른 callable을 한 타입으로 저장하지만 간접 호출 비용이 있습니다.
std::function<bool(int)>
이 절의 핵심: “함수처럼 부른다”보다 “상태가 필요한가, 이름 붙여 재사용할 것인가”를 먼저 봅니다.