函数对象也称为仿函数,主要是为了做配接使用的,因为在算法的设计过程中,我们会发现其本质往往是不变的(例如排序算法的思想),变化的除了数据之外还有操作(例如排序中不一定是比较大小,也可以是两两之间满足某种关系),仿函数就是为了这种情况产生的,它替代原来需要函数指针的地方,把这种操作或者策略传给算法,使得算法抽象性更高,也就更通用。
为什么不用函数指针?很简单的解释是抽象性不够,更进一步说是它无法配接,也就是可以将操作配接在一起变换为更复杂的操作(例如compose和bind1st等等方法),仿函数则可以轻松实现这些配接,使得其功能异常强大。还有一点就是你无法定义参数类型为自身的函数指针类型.
binder1st,binder2nd是为了进行仿函数与仿函数之间的适配,这部分内容可以看这篇随笔: