Generic callback

今天又经历了一次广度搜索式的学习,从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的那个翻译真的太不给力。

 

这里,再贴一遍代码,以待备用。

class callbackBase { public: virtual ~callbackBase() = 0 {} virtual void operator()() const {} }; template class callback : public callbackBase { public: typedef void (T::*FUNC)(); callback( T& t, FUNC f ) :object(&t), func(f) { } ~callback(); virtual void operator()() { (object->*func)(); } private: T* object; FUNC func; }; template callback make_callback( T& t, void (T::*FUNC) () ) { return callback(t, FUNC ); }

你可能感兴趣的:(callback,object,function,wrapper,functor,语言,技术)