c++ primer 之-------操作符operator()

    技术2022-05-19  27

    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()。


    最新回复(0)