Boost中应用的泛型编程技术
的类 型[注]。类型生成器产生的新类型一般作为生成器中嵌套的typedef出现。用类型 生成器的主要目的是为了让复杂的类型表达式显得更简单些。比如 boost::filter_iterator_generator:
看起来可真够复杂的。但现在生成一个合适的filter iterator可 就容易多了,只需要写:
就行了。 7、对象生成器 对象生成器是一种函 数模板,依据其参数产生新的对象。可以把它想象成泛型化的构造函数。有些情 况下,欲生成的对象的精确类型很难甚至根本无法表示出来,这时对象生成器可 就管用了。对象生成器的优点还在于它的返回值可以直接作为函数参数,而不像 构造函数那样只有在定义变量时才会调用。Boost和标准库中用到的对象生成器大 多都加了个前缀make_,比如std::make_pair(const T&, const U&)。 看看下面的例子:
通过把两个标准的对象生成器bind2nd和mem_fun合用,我们可以很轻松地tweak所 有的widget:
如果不用对象 生成器,上面的函数可能就得这样来实现:
表达式越复杂,就越需要缩短这些冗长的类型说明,对 象生成器的好处也就越能显现。 8、策略类 策略类就是用来传递行为的模 板参数。标准库中的std::allocator就是策略类,把内存管理的行为应用到标准 容器中。 Andrei Alexandrescu在他的文章中对策略类进入了全面而深入 的分析,他写道: “策略类精确地反映了设计时的抉择。他们要么 从其它类中继承,要么包含在其它类中。策略类在同样的句法结构上提供了不同 的策略。使用策略的类把它用到的每一个策略都作为模板参数,这样,用户就可 以自由地选择需要使用的策略。 策略类的强大在于它们能够自由地组合在 一起。通过把策略类作为模板参数的办法来组合多种策略,代码量与使用的策略 数只成线性关系。” Andrei认为策略类的强大源于其小粒度和正交 性。Boost在迭代适配器库中的策略类运用可能淡化了这一卖点。在这个库中,所 有已适配的迭代器的行为都放在一个策略类里面。其实,Boost并不是开先河者。 std::char_traits就是一个策略类,它决定了std::basic_string的行为,尽管它 的名字叫traits而不叫policy。 注:因为C++缺少模板化的typedef,类型 生成器可以作为其替代方案。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |