网站建设论文3000字范文,thinkcmf跟wordpress,宁波h5网站建设,阿里云上做网站转自#xff1a;C中如何区分构造函数与重载operator()得到的仿函数?求大神!_360问答
此外,你觉得仿函数(functor)是否能完全取代function呢?
以下是个人使用C仿函数#xff0c;function表达式的一些体悟。
首先是定义形式#xff1a;
构造函数无返回值#xff0c;而o…转自C中如何区分构造函数与重载operator()得到的仿函数?求大神!_360问答
此外,你觉得仿函数(functor)是否能完全取代function呢?
以下是个人使用C仿函数function表达式的一些体悟。
首先是定义形式
构造函数无返回值而operator是可以有返回值的
定义时构造函数需要类名而重载operator()则不用
其次是调用形式
构造函数是声明对象而仿函数则需要声明好的对象进行调用。 functor是仿函数function是函数还是std::function?
如果是函数的话个人感觉不会替代。因为毕竟C是C的超集而C中很多用到函数指针的地方functor可能并不那么好用。
如果是std::function的话那感觉也不会替代因为std::function配合std::bind可以处理函数及仿函数。bind()接受一个函数或者函数对象或者任何你可以通过”(…)”符号调用的事物生成一个其有某一个或多个函数参数被“绑定”或重新组织的函数对象。而functor好像不能以std::function作为参数传入。
话说仿函数即函数对象书写比较费事所以C 11增加了lambda表达式即匿名函数。函数对象即仿函数多用于C STL中而在微软新加入的并行库PPL中task等并不接受仿函数多用lambda表达式。更容易。
希望不会误人子弟。
追问 : 谢谢您的分析给了我很大启发确实两者之间还是有着很大差距的。还有一个小问题想请教一下我现在准备实现一个小的动态语言解释器。如果将里面的函数用伪函数的思想来实现的话就能很方便地将函数和对象统一起来。我想问问我这想法可以实施吗?
追答 : 可以。仿函数本来就是一个对象但是它可以像函数一样调用所以叫仿函数。另外仿函数是可以带状态的即可以带一些附加数据。而函数指针式是不可以的。