더북(TheBook)

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)을 사용한다. 일반화된 지정은 타입을 식별하는 함수 템플릿 매개변수를 갖는 함수를 인수로 쓸 것을 지정할 수 있다.

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