더북(TheBook)

두 번째 문장은 data 배열에 있는 각 원소의 값을 제곱값으로 바꿀 것이다.

표준 라이브러리의 functional 헤더에는 템플릿 타입 std::function<>이 정의되어 있다. std::function<>은 반환 타입과 매개변수 타입으로 정의된 함수 포인터에 대한 래퍼이다. 물론, 람다 표현식도 포함한다. std::function 템플릿의 타입 인수는 Return_Type(Param_Types) 형태로 되어 있다. Return_Type은 람다 표현식(또는 함수 포인터)이 반환하는 값의 타입이다. Param_Types는 람다 표현식(함수 포인터)을 위한 매개변수 타입의 목록이다(콤마로 구분한다). 앞에서 람다 표현식으로 표현한 변수는 다음과 같이 정의할 수 있다.

std::function<double(double)> op { [] (double value) { return value*value*value; } };
 

이제 op 변수는 서명(signature)만 같다면 함수 인수를 받는 함수에 인수로 전달할 수 있다. 다른 어떤 것의 반환 타입, 매개변수의 개수와 타입만 같다면 op 변수를 다른 어떤 것으로 얼마든지 재정의할 수 있다.

op = [] (double value) { return value*value; };
 

이제 op는 인수를 받아 제곱을 돌려주는 함수를 표현한다. std::function 타입 템플릿으로 호출 가능한 것들의 타입을 지정할 수 있으며, 호출 가능한 것들에는 람다 표현식과 함수 객체도 포함된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.