c++ 为什么引入函数对象?

C++引入函数对象主要是因为函数对象具有以下优势:

  1. 函数对象可以有自己的状态:我们可以在类中定义状态变量,这样一个函数对象在多次的调用中可以共享这个状态。但是函数调用没这种优势,除非它使用全局变量来保存状态。

  2. 函数对象有自己特有的类型,而普通函数无类型可言:这种特性对于使用C++标准库来说是至关重要的。这样我们在使用STL中的函数时,可以传递相应的类型作为参数来实例化相应的模板,从而实现我们自己定义的规则。

  3. 函数对象可以携带附加数据:这是函数对象相比于函数指针的一个重要优势。例如,你可以在函数对象中保存一些额外的信息,然后在调用函数对象时使用这些信息。

  4. 函数对象可以封装类成员函数指针:因为函数对象可以携带附加数据,而成员函数指针缺少一个类实体 (类实例)指针来调用,因此,可以把类实体指针给函数对象保存起来,就可以用于调用对应类实体成员函数了。

因此,虽然函数对象在使用方式上与函数指针相似,但是由于以上的优势,函数对象在很多情况下是更好的选择。希望这个解释对你有所帮助!

 
posted @ 2023-11-25 19:51  ponder776  阅读(20)  评论(0编辑  收藏  举报