仿函数的优点疑义
仿函数的优点疑问
勾了一把,最多也就看到3中版本对仿函数的说明。
其中大部分都是在说仿函数如何好,也没有搞清楚具体好在哪。所以有个疑问。
不谈论性能问题,就对功能问题来做一下求问:
假设不写具有模板性质的仿函数。
好处具体在什么地方?
我自己发现的好处:
1,减少了对函数或者函数指针这些复杂申明处理的问题。简单化调用“函数”。
2,可以写托管类型的代码,chorme里面有个托管类类型,大量就采用了仿函数(其实我觉得叫做括号重载比较好。),还有一些种类的智能指针部分函数(例如返回data_地址的什么的。)
网上说,仿函数是有状态的,如何如何好。
确实没搞明白,有状态带来的好处是啥(除了搞成托管类型)。
仿函数可以替代公共函数?
我最近看到一哥们的代码很喜欢在类内部写仿函数。然后10几个类会出现一模一样的处理流程的仿函数(入参稍有区别,也没有看出和状态有关的东西),而自己又自带一个自身的仿函数。
就想了解以一下仿函数的一些优点。
------解决方案--------------------
可以传递变量到operator()内部,普通函数的话则只能使用全局变量。
有lambda以后,仿函数也该下岗了。
------解决方案--------------------
跟函数对象类比的不应该是函数,而是函数指针。
C语言里只能用函数指针,往往传递函数指针的时候还得另有个参数传状态。当然函数对象主要的意义可能还是写着方便。
------解决方案--------------------
语法糖越甜,编译调试查错越苦!
------解决方案--------------------
At run time, when call a function pointer, CPU needs to jump to the code which is costly. while with funtor or callable object, compile can inline the code into the place which means code runs faster.
勾了一把,最多也就看到3中版本对仿函数的说明。
其中大部分都是在说仿函数如何好,也没有搞清楚具体好在哪。所以有个疑问。
不谈论性能问题,就对功能问题来做一下求问:
假设不写具有模板性质的仿函数。
好处具体在什么地方?
我自己发现的好处:
1,减少了对函数或者函数指针这些复杂申明处理的问题。简单化调用“函数”。
2,可以写托管类型的代码,chorme里面有个托管类类型,大量就采用了仿函数(其实我觉得叫做括号重载比较好。),还有一些种类的智能指针部分函数(例如返回data_地址的什么的。)
网上说,仿函数是有状态的,如何如何好。
确实没搞明白,有状态带来的好处是啥(除了搞成托管类型)。
仿函数可以替代公共函数?
我最近看到一哥们的代码很喜欢在类内部写仿函数。然后10几个类会出现一模一样的处理流程的仿函数(入参稍有区别,也没有看出和状态有关的东西),而自己又自带一个自身的仿函数。
就想了解以一下仿函数的一些优点。
------解决方案--------------------
可以传递变量到operator()内部,普通函数的话则只能使用全局变量。
有lambda以后,仿函数也该下岗了。
------解决方案--------------------
跟函数对象类比的不应该是函数,而是函数指针。
C语言里只能用函数指针,往往传递函数指针的时候还得另有个参数传状态。当然函数对象主要的意义可能还是写着方便。
------解决方案--------------------
语法糖越甜,编译调试查错越苦!
------解决方案--------------------
At run time, when call a function pointer, CPU needs to jump to the code which is costly. while with funtor or callable object, compile can inline the code into the place which means code runs faster.