• 2007-11-01

    GNU libstdc++ 源码分析(1) - [billjeff:Programming]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://billjeff.blogbus.com/logs/10594347.html

    晚上继续看GNU的StdC++Lib的代码,在这里记点笔记,算是做为心得,有错误之处请指正。

    *

    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?应该说加上比较好,有不加潜在的危害吗?

    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我