由于我已经开始使用这个网站,我一直听说Boost库.我想知道Boost库有哪些主要优点(因此我应该使用它)以及Boost库的可移植性如何?
Boost由标准委员会的几名成员组织.
因此,它将成为下一个标准的图书馆的温床.
它是STL的扩展(它填充了剩下的位)
这是有据可查的.
这是很好的同行评审.
它具有很高的活动性,因此可以快速找到并修复错误.
它是平台中立的,无处不在.
它是免费使用的.
随着tr1即将推出,很高兴知道增强已经覆盖了很多地面.tr1中的许多库基本上都是直接从boost原型中调整而来,因此经过了尝试和测试.不同之处在于它们已被移入std :: tr1命名空间(而不是boost).
您需要做的就是将以下内容添加到编译器默认包含搜索路径中:
/boost/tr1/tr1
然后当你包含标准头文件时,boost会自动将所有必需的东西导入到命名空间std :: tr1中
要使用std :: tr1 :: share_ptr,您只需要包含
您只需阅读Boost Background Information页面,即可快速了解使用Boost的原因以及可以使用它的原因.值得花几分钟.
99%便携式.
我会说,一旦你发现了通过boost解决的需求,它就有很多库非常有用.要么自己编写代码,要么使用非常可靠的库.关闭多索引,Lambda,程序选项,RegEx,SmartPtr和Tuple等东西的搁置源是惊人的......
最好的办法是花一些时间浏览不同库的文档,并评估它是否对您有用.
值得!
你得到了很多C++ 0x中的东西.但除了这种一般性之外,一些更好的细节是一个简单的正则表达式库,一个用于从字符串转换为整数的转换库(Lexical cast):
int iResult = 0; try { iResult = lexical_cast("4"); } catch(bad_lexical_cast &) { cout << "Unable to cast string to int"; }
一个日期/时间库,等等...
using namespace boost::gregorian; date weekstart(2002,Feb,1); date thursday_next = next_weekday(weekstart, Thursday); // following Thursday
还有一个Python接口(Boost Python),一个词法分析器/解析器DSL(Boost Spirit):
// A grammar in C++ for equations group = '(' >> expression >> ')'; factor = integer | group; term = factor >> *(('*' >> factor) | ('/' >> factor)); expression = term >> *(('+' >> term) | ('-' >> term));
而那只是表面上的......
Boost很棒,但是在这里玩Devil's Advocate是你可能不想使用Boost的一些原因:
有时无法在旧编译器上正确编译/工作.
它通常比模板繁重的方法更多地增加编译时间.
某些Boost代码可能无法完成您的想法.阅读文档!
模板滥用可能导致无法读取的错误消息.
模板滥用可能导致代码难以在调试器中单步执行.
它是前沿的C++.Boost的下一个版本可能无法在您当前(较旧的)编译器上编译.
所有这一切并不意味着你不应该看看Boost代码并自己获得一些想法,即使你没有按原样使用Boost.
Boost是C++库的集合.其中10个包含在C++ 0x的tr1中.
你可以在这里开始使用boost.
Boost是一系列高质量的同行评审C++库,强调可移植性和正确性.它充当了对语言和标准库的新增功能的事实证明.查看他们的网站了解更多详情.