-
2007-11-01
GNU libstdc++ 源码分析(1) - [billjeff:Programming]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
晚上继续看GNU的StdC++Lib的代码,在这里记点笔记,算是做为心得,有错误之处请指正。
http://billjeff.blogbus.com/logs/10594347.html
*
Module->Functor Base: 这是后面Functor的基类,后面具体的库Functor和用户自定义Functor继承自这个Module当中的两个基类:struct std::binary_function< _Arg1, _Arg2, _Result > 和 struct std::unary_function< _Arg, _Result >。是否Functor都需要满足继承自着两个基类的约束还不知道,待后面的学习。这两个基类也非常简单,只是几个typedef,但是不可小看他们,这位后面的工作提供了一些统一的基础,例如能够统一的获取某个Functor的第一参数类型、返回值等信息。
Module->Arithmetic Classes, Comparison Classes and Boolean Operations Class都比较简单,都是继承自Functor Base当中的特定基类,并且重载了operator ()。
Module->Negators:继承自Functor Base,有点封装的感觉,Negator将原先的Functor裹入内部,重载operator(),返回值是原先Functor的!(逻辑反)。
Module->Binder Classes:同Negator类似,只是内部多了一个某个Argument(来自原Functor)的变量,用来保存用户bind的值,之后还是重载 operator(),里面调用原Functor。裹啊裹,不知道一系列的动作是否都是可以内联展开。应该是可以的。
Module->Adaptors for pointers to function:一句话,能够将函数指针裹成一个Functor。有两个疑问:一个是该struct提供了一个默认ctr,对里面的函数指针没做任何动作,那么它的值就是undefined的,如果调用operator()的话,会崩溃,为何这么做呢?第二,为何要在另外一个带参数的ctr前加 explicit?应该说加上比较好,有不加潜在的危害吗?随机文章:
加入开源 2007-11-12POJ 1006 2007-09-11二分图匹配-匈牙利算法实现 2007-09-02最大二分匹配算法 2007-08-30有流量上下界的最大流最小流算法实现 2007-08-15
收藏到:Del.icio.us






