room의 초기화 리스트 값은 volume 객체의 operator()()를 호출하게 되므로 이 표현식은 volume.operator()(16, 12, 9.5)와 같다. 함수가 함수 객체를 인수로 받을 때 함수 객체는 함수처럼 사용된다. 클래스에 operator()() 함수를 두 가지 이상 정의하는 것도 가능하고, 이렇게 하면 객체를 다양한 방식으로 적용할 수 있다. 길이, 너비, 높이를 멤버로 정의하고 이들 값을 반환하는 접근자 함수 멤버를 정의한 Box 클래스가 있다고 하자. Box 객체를 수용하도록 Volume 클래스를 다음과 같이 확장할 수 있다.
class Volume { public: double operator()(double x, double y, double z) { return x*y*z; } double operator()(const Box& box) { return box.getLength()*box.getWidth()*box.getHeight(); } };
이제 Volume 객체는 Box 객체의 부피 계산에도 사용할 수 있다.
Box box{1.0, 2.0, 3.0}; std::cout << "상자의 부피: " << volume(box) << std::endl;
Volume 객체를 함수에 인수로 전달하고 싶다면 함수 매개변수의 타입을 Volume&로 지정만 하면 된다. 일반적으로 STL 알고리즘은 매개변수보단 더 일반화된 지정(generalized specification)을 사용한다. 일반화된 지정은 타입을 식별하는 함수 템플릿 매개변수를 갖는 함수를 인수로 쓸 것을 지정할 수 있다.