stl(15)函数对象(仿函数)

1.定义一个类(结构体),这个类(结构体)种重载了"()"这个符号,然后用这个类(结构体)创建的对象就叫做函数对象。

2.函数对象的用法和函数的用法类似,都是使用"()"调用。

3.函数对象相较于函数可以拥有自己的状态。比如在定义函数对象的类的时候,可以定义一个int类型的属性来记录该函数对象被调用了多少次;

4.函数对象是为了配合stl种的一些特定算法使用的,比如在为set容器自定义排序方法的时候就需要传入一个函数对象。

5.函数对象可以作为一个函数的参数传入。

6.如果一个函数对象有一个参数叫做一元仿函数,如果有两个参数叫做二元仿函数...

例1:分别用函数和函数对象实现打印输出一个int的功能

(1)函数实现

void myPrint(int a){

  std::cout<<a<<std::endl;

}

void main(){

  myPrint(5);

}

(2)函数对象实现

class MyPrint{

public:

  void operator()(int a){

    std::cout<<a<<std::endl;

  }

};

void main(){

  MyPrint myPrint;

  myPrint(5);

}

例2:定义一个可以记录自己被调用了多少次的函数对象

class MyPrint{

public:

  int count = 0;

  void operator()(int a){

    std::cout<<a<<std::endl;

    count++;

  }

};

void main(){

  MyPrint myPrint;

  myPrint(5);

  myPrint(5);

  myPrint(5);

  std::cout<<"被调用的次数是:"<<myPrint.count<<std::endl;

}

例3:将函数对象作为一个参数传入函数内部

class MyPrint{

public:

  void operator()(int a){

    std::cout<<a<<std::endl;

  }

};

void doSome(MyPrint myPrint,int a){

  myPrint(a);

}

void main(){

  MyPrint myPrint;

    doSome(myPrint,5);

}

原文地址:https://www.cnblogs.com/maycpou/p/14438109.html