条款38:把仿函数类设计为用于值传递
函数指针是值传递。STL中的习惯是当传给函数和从函数返回时函数对象也是值传递的。这暗示了两个东西。第一,你的函数对象应该很小。否则它们的拷贝会很昂贵。第二,你的函数对象必须单态(也就是,非多态)——它们不能用虚函数。
条款39:用纯函数做判断式
判断式是返回bool。纯函数是返回值只依赖于参数的函数。如果f是一个纯函数,x和y是对象,f(x, y)的返回值仅当x或y的值改变的时候才会改变。一个判断式类是一个仿函数类,它的operator()函数是一个判断式,也就是,它的operator()返回true或false。
条款40:使仿函数类可适配
四个标准函数适配器(not1、not2、bind1st和bind2nd)都需要存在某些typedef,一些其他人写的非标准STL兼容的适配器(比如来自SGI和Boost的——参见条款50)也需要。提供这些必要的typedef的函数对象称为可适配的,而缺乏那些typedef的函数对象不可适配。What?改天再了解。
条款41:了解使用ptr_fun、mem_fun和mem_fun_ref的原因
每当你传递一个函数给STL组件时都使用它ptr_fun。mem_fun和mem_fun_ref的情况则完全不同,只要你传一个成员函数给STL组件,你就必须使用它们。与for_each等函数有关。
条款42:确定less<T>表示operator<
保持一致吧。