助力图书馆
自从我开始使用这个网站以来,我一直听说Boost图书馆。 我想知道什么是Boost库的一些主要好处(因此为什么要使用它)以及Boost库的便携性如何?
Boost由标准委员会的几名成员组织。
因此,图书馆将成为下一个标准的温床。
- 这是对STL的扩展(它填补了剩下的部分)
- 这是有据可查的。
- 这是很好的同行评审。
- 它具有很高的活性,所以很快find并修复了错误。
- 它是平台中立,工作到处。
- 这是免费使用。
随着tr1即将到来,很高兴知道,已经有很多的地面覆盖。 tr1中的很多库基本上都是直接从增强的原始文件中进行调整的,因此经过了试验和testing。 不同之处在于它们已经被移入了std :: tr1命名空间(而不是boost)。
所有你需要做的是将下面的内容添加到你的编译器默认包含searchpath :
<boost-install-path>/boost/tr1/tr1
然后,当你包含标准头文件时,boost会自动将所有需要的东西导入到std :: tr1的命名空间中
例如:
要使用std :: tr1 :: share_ptr,只需要包含<memory>。 这将给你所有的智能指针与一个文件。
您可以简单阅读Boost Background Information页面,快速了解为什么要使用Boost以及您可以使用它。 值得花费几分钟。
99%便携式。
我会说,一旦你发现需要通过提升解决的问题,它有相当多的库是非常有用的。 要么你自己编码,要么使用一个非常稳定的库。 有像多指数,Lambda,程序选项,正则expression式,SmartPtr和Tuple的东西搁置源是惊人的…
最好的方法是花一些时间阅读不同库的文档,并评估它是否对您有任何用处。
值得!
Boost是C ++库的集合。 其中10个被包含在C ++ 0x的tr1中。
你可以从这里开始 。
Boost是伟大的,但只是在这里扮演恶魔的倡导者是你可能不想使用Boost的一些原因:
- 有时无法在旧的编译器上编译/正常工作。
- 它通常会增加编译时间,而不是模板繁重的方法。
- 一些Boost代码可能不会做你认为它的作用。 阅读文档!
- 模板滥用可能导致不可读的错误消息。
- 模板滥用可能导致代码很难在debugging器中一步一步通过。
- 这是最新鲜的C ++。 Boost的下一个版本可能不再编译你当前的(旧的)编译器。
所有这些并不意味着你不应该看看Boost代码,并且即使你不使用Boost,也可以自己想一些想法。
你得到了很多C ++ 0x中的东西。 但是除了这个概括性之外,一些更好的细节是一个简单的正则expression式库 ,一个用于从string转换为整数的转换库(词法转换 ):
int iResult = 0; try { iResult = lexical_cast<int>("4"); } catch(bad_lexical_cast &) { cout << "Unable to cast string to int"; }
date/时间库 ,等等…
using namespace boost::gregorian; date weekstart(2002,Feb,1); date thursday_next = next_weekday(weekstart, Thursday); // following Thursday
还有一个Python接口 (Boost Python),一个词法分析器/parsing器DSL (Boost Spirit):
// A grammar in C++ for equations group = '(' >> expression >> ')'; factor = integer | group; term = factor >> *(('*' >> factor) | ('/' >> factor)); expression = term >> *(('+' >> term) | ('-' >> term));
这只是抓表面…
Boost是高质量同行评审的C ++库的集合,强调可移植性和正确性。 它作为语言和标准图书馆新增加的事实certificate基础。 查看他们的网站了解更多详情。
Boost的优点:它广泛使用,可以移植到任何现代C ++编译器或任何平台上。
这些function是平台独立的,你不必为每个新的框架学习一个新的线程devise。
它封装了很多特定于平台的function,如标准方式下的文件系统。
这正是C ++应该提供的! 很多Java的受欢迎程度是与一个标准的图书馆一起运行,以做你想要的所有东西。 不幸的是C ++只inheritance了有限的C / Unix标准函数。
shared_ptr
和weak_ptr
,尤其是在multithreading代码中,都是值得安装boost的。 BOOST_STATIC_ASSERT
对于编译时逻辑检查也非常酷。
boost中的很多类和实用程序都在头文件中,这意味着您可以在不需要编译任何东西的情况下获得很多function,这也是一个优点。 可移植性通常不是问题,除非你使用了一个非常老的编译器。 我曾试图让MPL与VC6一起工作,并在爆炸完成之前打印出4万条警告/内部错误。 但总的来说,大多数的图书馆应该工作,不pipe你的平台或编译器厂商。
考虑到来自Boost的很多事情已经在TR1中,而且很可能会在C ++标准库的下一个修订版中。 这是一个非常大的认可。
Boost是一个非常广泛的(通常)generics构造库,可以帮助几乎所有的应用程序。 这可以通过C ++ 0x规范中包含很多提升组件的事实来显示。
它至less在主要平台上也是可移植的,并且几乎适用于所有符合标准的C ++编译器。
唯一的警告是在boost库之间可能存在很多混合的依赖关系,使得仅仅挑选一个特定的组件(除了整个boost库之外)更难。
所有这些,再加上它鼓励了很多现代的,最佳实践的C ++技术。 它往往会提高你的代码的质量。
还要注意大部分的提升是模板,所以不需要构build
(只包括正确的头文件)。
less数需要build设的部分是可选的:
这些都可以独立build立,从而防止不必要的代码膨胀。