说实话,我现在真不知道仿函数存在的必要性,因为函数指针完全可以代替它。
仿函数又称为函数对象,也就是说它起着函数的作用,但它是一个对象。
class ISPOSITIVE
{
public:
bool operator()(int x){return x > 0 ? true : false;}
};
std::cout << ISPOSITIVE()(-5) << std::endl;
ISPOSITIVE()(-5) 首先是创建了一个临时无名对象ISPOSITIVE(),然后调用仿函数的operator()方法
ISPOSITIVE obj;
std::cout<< obj(-5) <<std::endl;
这种方式是:先创建一个ISPOSITIVEE对象,然后调用方法
当然了,基本上没有人这么使用仿函数,仿函数一般与算法、容器结合在一起使用,比如算法for_each()。
STL为了让仿函数融入与算法及容器中,定义了两个模板类型 binary_func unary_func,STL提供的任何一个
仿函数已经用户希望自定义的仿函数都需要从这两个模板类型派生(当然,你也可以不用从之继承,自然了就不能
使用其他的STL元素了)
STL提供了诸如equal little greate等仿函数,用于最简单的操作。