注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

为着理想勇敢前进

 
 
 

日志

 
 

点评Boost的库(a b c d e f)  

2007-06-29 00:31:39|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
any - Safe, generic container for single values of different value types, from Kevlin Henney.
any 是一个可以保存任何类型的值的对象。相当于带上类型信息,并且会自动调 delete 的 void* 。对于编码风格不好的人来说,any 也许可以用在某些场合。但是如果你的程序写得足够漂亮,是用不上any的。用any的地方就意味着强制转换,any能保证强制转换出错的时候会抛异常,即所谓“安全”。但这种安全不要也罢,最好是根本不需要强制类型转换。

array - STL compliant container wrapper for arrays of constant size, from Nicolai Josuttis.
很实用的一个容器,固定大小的数组。用过stl的人能马上上手。建议使用。用起来感觉有点像.net或者java的数组类型了。

assign - Filling containers with constant or generated data has never been easier, from Thorsten Ottosen.
如果说 boost 的库在很多人眼里都是奇技淫巧,那么这个 assign 就是奇技淫巧中的奇技淫巧。主要是靠重载运算符来冲击眼球的东西,以下代码如果你看得顺眼你就用吧,反正我是敬而远之。呵呵
vector<int> v; v += 1,2,3,4,5,6,7,8,9;
map<string,int> m; insert( m )( "Bar", 1 )( "Foo", 2 );

bind and mem_fn - Generalized binders for function/object/pointers and member functions, from Peter Dimov.
Boost最经典的几个库之一。bind 可以把一个函数绑上参数变成一个函数对象。因为STL和Boost很多地方都用到函数对象,这些场合用到 bind 几乎是一种必然。而 mem_fn 你基本上不会独立使用,绑成员函数的时候,bind 内部会用到mem_fn。

call_traits - Defines types for passing parameters, from John Maddock, Howard Hinnant, et al.
用处不大。原意是在模板元编程的时,涉及调用参数之处用这个来处理。实际上即使是这些场合call_traits也不够好用。我在处理参数的时候更多用的是 type_traits 里面的 add_xxx remove_xxx ,那样更灵活。

compatibility - Help for non-conforming standard libraries, from Ralf Grosse-Kunstleve and Jens Maurer.
用在一些非主流编译器上缺少某些标准头文件的问题的。我觉得多此一举,根本没必要支持那些非主流编译器,要我说的话,只支持最接近C++标准的编译器就够了,基本上就是 GCC 3.x 4.x 和 VC 7.1 8.0 。

compressed_pair - Empty member optimization, from John Maddock, Howard Hinnant, et al.
给 std::pair 做了一个优化,如果 pair 里面有一个类型是空类型,那么可以节省几个字节。这个优化倒也没坏处,只不过我实在想不出为什么我会在使用pair的时候用到空类型?

concept check - Tools for generic programming, from Jeremy Siek.
面向接口编程的时候,Boost 以外的世界用的都是纯虚函数,只有 Boost 格外喜欢模板。用纯虚函数的话,往往定义一个纯虚类,然后实现类从纯虚类派生,而若是用模板,对应纯虚类的概念则是Concept。Concept不用声明,要用什么方法的话,模板参数类型里面直接用就是了。不过如果用户传过来的类型没有那个方法,嘿嘿,编译器就得吐血了。这个concept check就是检查一个类型是否符合某个特定的接口的。我虽然没用过,不过我想若是多用用应该是好的风格吧。

config - Helps boost library developers adapt to compiler idiosyncrasies; not intended for library users.
虽然介绍说是给“boost library developers”用的,不过一般用户如果需要跨平台开发,这玩意儿还是有用的,只需#include <boost/config.hpp>就可以用很多宏来检测编译器和平台特性了。

conversion - Polymorphic and lexical casts, from Dave Abrahams and Kevlin Henney.
lexical_cast 内部实现用std::stringstream来进行数字到字符串或者字符串到数字的转换。比较实用。可以写这样的代码:lexical_cast<int>("123")或者lexical_cast<string>(123),相当方便。
那个啥polymorphic_cast没用,别用。

crc - Cyclic Redundancy Code, from Daryle Walker.
算CRC值用的,没什么可以多说的。

date_time - Date-Time library from Jeff Garland.
用来操作日期和时间的。这个库放到boost里面简直是明珠暗投(其实我内心觉得是暗珠明投),Boost 的一贯风格是把复杂的东西抽象得很简单,而这个 date_time 则恰恰相反…… date_time 其实是一个商业公司开发的,难道是搞得很复杂有利于给客户推销吗?里面有n多类,n多函数,一般人用用就晕了。我是专门进去细看过这玩艺儿的源码的,我真为我的抗晕能力而骄傲!

dynamic_bitset - A runtime sized version of std::bitset from Jeremy Siek and Chuck Allison.
用处不大的东西。

enable_if - Selective inclusion of function template overloads, from Jaakko J?rvi, Jeremiah Willcock, and Andrew Lumsdaine.
一个热爱模板的人迟早会用到的东西。以 ISO C++ 98/2003的标准,类模板支持部分特化。我们往往用这个机制来进行模板元编程,进行一些模板选择上的判断。不幸的是,函数模板还不支持部分特化。那么,有什么办法能够根据模板参数来选择调用哪个函数呢?正确答案就是 enable_if 。

filesystem - Portable paths, iteration over directories, and other useful filesystem operations, from Beman Dawes.
进行文件系统操作的库。比如枚举一个文件夹中的文件,复制、移动、删除文件,路径操作等等。非常好用,非常有用!1.34增加了Unicode文件名的支持。

foreach - BOOST_FOREACH macro for easily iterating over the elements of a sequence, from Eric Niebler.
1.34新增的一个库。详见http://www.ac.net.blog.163.com/blog/static/13649056200731075031248

format - Type-safe 'printf-like' format operations, from Samuel Krempp.
可以用来格式化字符串。不过我个人还是更偏爱标准库的stringstream。

function - Function object wrappers for deferred calls or callbacks, from Doug Gregor.
Boost 的老大写的库,是函数对象的容器。如果要在一个写死的结构里面保存任意的函数对象,就得用这个。
1.34有一个优化,用空间换时间,可以避免小对象的堆内存分配(不过每个function对象长到了32字节)。其实还有优化的余地,如果能避免绑一个function作为参数的时候也没有堆内存分配就好了。

functional - Enhanced function object adaptors, from Mark Rodgers.
对ISO C++ 98/2003 标准库<functional>有一些修修补补,没什么大用,绝大部分功能可以用 utility/result_of 和 bind 取代。

functional/hash - A TR1 hash function object that can be extended to hash user defined types, from Daniel James.
给tr1的哈希表用来算自定义类型的哈希值用的,我没用过。

  评论这张
 
阅读(456)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018