class absInt {
public:
int operator() (int val) {
int result = val < 0 ? -val : val;
return result;
}
};
重载的operator()必须被声明为成员函数,它的参数表可以有任意数据的参数,而参数类型可以是给出被作为函数参数的任何类型。重载的operator()的返回值可以是作为函数返回值类型的任何类型。
#include <vector>
#include <algorithm>
int main()
{
int ia[] = { -0,1,-1,-2,3,5,-5,8};
vector< int > ivec(ia, ia+8);
//把ivec的每个元素设置为其绝对值
tranform(ivec.begin(), ivec.end(), ivec.begin(), absInt());
//......
}
transform()的第一个和第二个实参指示了absInt操作被应用的元素范围。第三个实参指向“被用来存储absInt操作结果的向量”的开始。
transfrom()的第四个实参是一个absInt类的临时对象,它通过调用absInt的缺省构造函数来创建。main()调用的泛型算法transfrom的实例看起来像这样:
typedef vector<int>::iterator iter_type;
iter_type transform(iter_type iter, iter_type las, iter_type result, absInt func)
{
while(iter != last)
*result++ = func(*iter++);//调用absInt::operator()
return iter;
}
func是一个类类型的对象,它的类型代表了absInt操作,该操作把int型的值设置为其绝对值。对象func被用来调用absInt类的重载的opertor()。