1 Functor
函数对象, 其实就是一个重载了operator()的类。其使用方式与函数相似。
使用functor有两个优点:
1) Functor相比Function来说,可以传递更多的信息:因为Functor是以类的方式存在的,它可以包含任意多的信息。除了传入参数以外,你还可以在类内预设一些其它的信息。
2) 在作为参数传递时,Functor的效率往往比Function要高。这是因为,在把Functor作为参数传递时,你实际上传递的是Functor对象,在整个编译过程中,编译器始终知道它所在处理的Functor对象是哪个Functor类的,也就是说,它可以做编译时的优化。而对于Function来说,它往往以指针的方式传递,对于编译器来说,很难做(并不是不可能)编译时的优化。
//function
inline void increase_one_func(int& i)
{
++i;
}
//functor
class increase_one_functor
{
public:
void operator()(int& i)
{
++i;
}
}increase_one_functor;
int iCount = 1;
increase_one_functor(iCount); //iCount = 2;
increase_one_func(iCount); //iCount = 3;