关于才C++中的op函数

hui_li007 2011-07-07 03:33:25
求C++中op函数的用法和功能,请举例子,谢谢!
...全文
836 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
至善者善之敌 2011-07-07
  • 打赏
  • 举报
回复
 仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。
  在我们写代码时有时会发现有些功能的实现的代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独立出来成为一个类的一个成员函数。但是又很想复用这些代码。写一个公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变量,再说为了复用这么一片代码,就要单立出一个函数,也不是很好维护。这时就可以用仿函数了,写一个简单类,除了那些维护一个类的成员函数外,就只是实现一个operator(),在类实例化时,就将要用的,非参数的元素传入类中。这样就免去了对一些公共变量的全局化的维护了。又可以使那些代码独立出来,以便下次复用。而且这些仿函数,还可以用关联,聚合,依赖的类之间的关系,与用到他们的类组合在一起,这样有利于资源的管理(这点可能是它相对与函数最显著的有点了)。如果在配合上模板技术和policy编程思想,那就更是威力无穷了,大家可以慢慢的体会。
编辑本段
仿函数(functor)在各编程语言中的应用
C
  C语言使用函数指针和回调函数来实现仿函数,例如一个用来排序的函数可以这样使用仿函数
  #include <stdlib.h>
  /* Callback function */
  int compare_ints_function(void*A,void*B)
  {
  return*((int*)(A))<*((int*)(B));
  }
  /* Declaration of C sorting function */
  void sort(void*first_item,size_t item_size,void*last_item,int(*cmpfunc)(void*,void*));
  int main(void)
  {
  int items[]={4,3,1,2};
  sort((void*)(items),sizeof(int),(void*)(items +3), compare_ints_function);
  return 0;
  }
C++
  在C++里,我们通过在一个类中重载括号运算符的方法使用一个函数对象而不是一个普通函数。
  class compare_class
  {
  public:
  bool operator()(int A, int B)const{return A < B;}
  };
  // Declaration of C++ sorting function.
  template<class ComparisonFunctor>
  void sort_ints(int* begin_items, int num_items, ComparisonFunctor c);
  int main()
  {
  int items[]={4, 3, 1, 2};
  compare_class functor;
  sort_ints(items, sizeof(items)/sizeof(items[0]), functor);
  }
ryfdizuo 2011-07-07
  • 打赏
  • 举报
回复
就是仿函数咯。
stl中只提供了一元,二元的仿函数。。。
就想叫yoko 2011-07-07
  • 打赏
  • 举报
回复
http://blog.csdn.net/fj352127189/article/details/5828093

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧