C++仿函数(functor)
2014-07-26 17:25
393 查看
转自http://my.oschina.net/llehs/blog/180594,作者:雪让
什么是仿函数(functor)
functor的英文解释为something that performs a function,即其行为类似函数的东西。C++中的仿函数是通过在类中重载()运算符实现,使你可以像使用函数一样来创建类的对象。
仿函数(functor)的实现及使用
为什么使用仿函数(functor)
迭代和计算逻辑分离
使用仿函数可以使迭代和计算分离开来。因而你的functor可以应用于不同场合,在STL的算法中就大量使用了functor,下面是STL中for_each中使用functor的示例:
参数可设置
可以很容易通过给仿函数(functor)设置参数,来实现原本函数指针才能实现的功能,看下面代码:
这个仿函数的功能是求给定值平方或立方运算的平均值。只需要这样来声明一个对象即可:
有状态
与普通函数另一个区别是仿函数(functor)是有状态的,所以可以进行诸如下面这种操作:
对多个不同的数据集进行取平均。
性能
我们看一下2中写的代码:
编译器可以准确知道std::transform需要调用哪个函数(add_x::operator)。这意味着它可以内联这个函数调用。而如果使用函数指针,编译器不能直接确定指针指向的函数,而这必须在程序运行时才能得到并调用。
一个例子就是比较std::sort 和qsort ,STL的版本一般要快5-10倍。
总结
当然,前3点都可以使用传统的函数和指针实现,但是用仿函数(functor)可以让这种实现变的更加简单。
什么是仿函数(functor)
functor的英文解释为something that performs a function,即其行为类似函数的东西。C++中的仿函数是通过在类中重载()运算符实现,使你可以像使用函数一样来创建类的对象。
仿函数(functor)的实现及使用
为什么使用仿函数(functor)
迭代和计算逻辑分离
使用仿函数可以使迭代和计算分离开来。因而你的functor可以应用于不同场合,在STL的算法中就大量使用了functor,下面是STL中for_each中使用functor的示例:
可以很容易通过给仿函数(functor)设置参数,来实现原本函数指针才能实现的功能,看下面代码:
与普通函数另一个区别是仿函数(functor)是有状态的,所以可以进行诸如下面这种操作:
性能
我们看一下2中写的代码:
一个例子就是比较std::sort 和qsort ,STL的版本一般要快5-10倍。
总结
当然,前3点都可以使用传统的函数和指针实现,但是用仿函数(functor)可以让这种实现变的更加简单。
相关文章推荐
- C++回调函数(callback)与仿函数(functor)的异同
- C++ 仿函数(functor)
- C++仿函数(functor)
- C++ 仿函数(functor)
- C++ STL 学习 :for_each与仿函数(functor)(一)
- C++STL学习(9)仿函数(function objects, functor)
- C++回调函数(callback)与仿函数(functor)的异同
- C++回调函数(callback)与仿函数(functor)的异同
- C++回调函数(callback)与仿函数(functor)的异同
- C++ STL 学习 :更多仿函数(functor)(二)
- C++回调函数(callback)与仿函数(functor)的异同
- C++回调函数(callback)与仿函数(functor)的异同
- C++回调函数(callback)与仿函数(functor)的异同
- C++回调函数(callback)与仿函数(functor)的异同
- 【zz】C++回调函数(callback)与仿函数(functor)的异同
- C++回调函数(callback)与仿函数(functor)的异同
- c++仿函数 functor
- C++回调函数(callback)与仿函数(functor)的异同
- C++ STL 学习 :for_each与仿函数(functor)(一)
- C++ 仿函数(functor)