今天又经历了一次广度搜索式的学习,从generic callback(泛型回调)到Function object。
看了sgi关于function object 的解释,我的c++脉象顿时打通了Function object这一点。因为之前看essential c++,里面也提到了Function object,当时我还是似懂非懂。
sgi里面说A Function Object , or Functor (the two terms are synonymous) is simply any object that can be called as if it is a function. An ordinary function is a function object, and so is a function pointer; more generally, so is an object of a class that defines operator() .
在C++里,一切东西都是对象,我们自己写的类的对象是用户类型的对象,c++语言提供的类型,int,float之类的是语言内建类型对象,那么我们自己写的带operator()的类就是function object,然后一般的函数指针跟int,float一样也是C++语言内建的对象。这样我们一般所说的function object其实就是用户写的带operator()的类的对象。
看完了generic callback这一章,感觉还是挺有用的,事实上现在游戏里的event系统就是这样写的,只不过是固定单个参数的T::*func,而且没有用operator符号,而是具名的handleEvent,文章里的make_callback模板函数还是挺方便的,明天加到系统里。
另外,在看Exeptional C++ Style的中文版的#35时,一开始还为其将wrapper翻译成外覆而对作者不以为然,后来看下去发现整体翻译还行,所以保持一颗宽容的心还是很重要的,不过wrapper的那个翻译真的太不给力。
这里,再贴一遍代码,以待备用。