提升图书馆

Mat*_*coe 51 c++ boost

由于我已经开始使用这个网站,我一直听说Boost库.我想知道Boost库有哪些主要优点(因此我应该使用它)以及Boost库的可移植性如何?

Mar*_*ork 67

Boost由标准委员会的几名成员组织.
因此,它将成为下一个标准的图书馆的温床.

  1. 它是STL的扩展(它填充了剩下的位)
  2. 这是有据可查的.
  3. 这是很好的同行评审.
  4. 它具有很高的活动性,因此可以快速找到并修复错误.
  5. 它是平台中立的,无处不在.
  6. 它是免费使用的.

随着tr1即将推出,很高兴知道增强已经覆盖了很多地面.tr1中的许多库基本上都是直接从boost原型中调整而来,因此经过了尝试和测试.不同之处在于它们已被移入std :: tr1命名空间(而不是boost).

您需要做的就是将以下内容添加到编译器默认包含搜索路径中:

<boost-install-path>/boost/tr1/tr1
Run Code Online (Sandbox Code Playgroud)

然后当你包含标准头文件时,boost会自动将所有必需的东西导入到命名空间std :: tr1中

例如:

要使用std :: tr1 :: share_ptr,您只需要包含<memory>.这将为您提供一个带有一个文件的智能指针.


Mih*_*șan 17

您只需阅读Boost Background Information页面,即可快速了解使用Boost的原因以及可以使用它的原因.值得花几分钟.

  • 在他的辩护中,现在它可以在这里找到并可搜索到网站上的每个人(并且谷歌搜索结果可能很高). (2认同)

arg*_*txa 15

99%便携式.

我会说,一旦你发现了通过boost解决的需求,它就有很多库非常有用.要么自己编写代码,要么使用非常可靠的库.关闭多索引,Lambda,程序选项,RegEx,SmartPtr和Tuple等东西的搁置源是惊人的......

最好的办法是花一些时间浏览不同库的文档,并评估它是否对您有用.

值得!

  • 几年前,Boost的几个部分在Sun和IBM的C++编译器上失败了.目前还不确定这种情况,但我不认为可移植性接近99%. (4认同)

Dou*_*yle 13

你得到了很多C++ 0x中的东西.但除了这种一般性之外,一些更好的细节是一个简单的正则表达式库,一个用于从字符串转换为整数的转换库(Lexical cast):

int iResult = 0;
try
{
    iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
    cout << "Unable to cast string to int";
}
Run Code Online (Sandbox Code Playgroud)

一个日期/时间库,等等...

using namespace boost::gregorian;
date weekstart(2002,Feb,1);
date thursday_next = next_weekday(weekstart, Thursday); // following Thursday
Run Code Online (Sandbox Code Playgroud)

还有一个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));
Run Code Online (Sandbox Code Playgroud)

而那只是表面上的......


Jer*_*rks 13

Boost很棒,但是在这里玩Devil's Advocate是你可能不想使用Boost的一些原因:

  • 有时无法在旧编译器上正确编译/工作.
  • 它通常比模板繁重的方法更多地增加编译时间.
  • 某些Boost代码可能无法完成您的想法.阅读文档!
  • 模板滥用可能导致无法读取的错误消息.
  • 模板滥用可能导致代码难以在调试器中单步执行.
  • 它是前沿的C++.Boost的下一个版本可能无法在您当前(较旧的)编译器上编译.

所有这一切并不意味着你不应该看看Boost代码并自己获得一些想法,即使你没有按原样使用Boost.


Bri*_*ndy 11

Boost是C++库的集合.其中10个包含在C++ 0x的tr1中.

你可以在这里开始使用boost.


luk*_*uke 6

Boost是一系列高质量的同行评审C++库,强调可移植性和正确性.它充当了对语言和标准库的新增功能的事实证明.查看他们的网站了解更多详情.


Mar*_*ett 5

Boost 的优点:它广泛可用,可以移植到任何现代 C++ 编译器或任何平台。
这些功能与平台无关,您不必为每个新框架学习新的线程设计。
它以标准方式封装了许多特定于平台的功能,例如文件系统。

这是 C++ 应该附带的!Java 的许多流行之处在于它附带了一个标准库,几乎可以满足您的所有需求。不幸的是,C++ 只继承了有限的 C/Unix 标准函数。