仿函数(functor)又称之为函数对象(function object),其实就是重载了()操作符的struct,没有什么特别的地方。 如以下代码定义了一个二元判断式functor: struct IntLess 为什么要使用仿函数呢? 1.仿函数比一般的函数灵活。 2.仿函数有类型识别,可以作为模板参数。 3.执行速度上仿函数比函数和指针要更快的。 怎么使用仿函数? 除了在stl里,别的地方你很少会看到仿函数的身影。而在stl里仿函数最常用的就是作为函数的参数,或者模板的参数。 在stl里有自己预定义的仿函数,比如所有的运算符,=,-,*,、。。。。。比如'<'号的仿函数是less template<class _Ty> 从上面的定义可以看出,less从binary_function<...>继承来的,那么binary_function又是什么的? template<class _Arg1, class _Arg2, class _Result> 其实binary_function只是做一些类型声明而已,别的什么也没做,但是在stl里为什么要做这些呢?如果你要阅读过stl的源码,你就会发现,这样的用法很多,其实没有别的目的,就是为了方便,安全,可复用性等。但是既然stl里面内定如此了,所以作为程序员你必须要遵循这个规则!否则就别想安全的使用stl! 比如我们自己定一个+的仿函数。可以这样: template <typename type1,typename type2> } 我们看这一行: inline bool operator()(type1 t1,type2 t2) const//这里的const不能少 与binary_function(二元函数)相对的是unary_function(一元函数),其用法同binary_function struct unary_function { 要点:仿函数就是重载()的class,并且重载函数要为const的.. 如果要自定义仿函数,并且用于stl接配器,那么一定要从binary_function或者,unary_function继承.
|
stl--仿函数
最新推荐文章于 2024-06-29 11:18:48 发布