提升图书馆

时间:2008-09-29 15:43:29

标签: c++ boost

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

12 个答案:

答案 0 :(得分:68)

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

  1. 它是STL的扩展(它填充了剩下的位)
  2. 有详细记录。
  3. 很好的同行评审。
  4. 它具有很高的活动性,因此可以快速找到并修复错误。
  5. 它是平台中立的,无处不在。
  6. 可以免费使用。
  7. 随着tr1即将推出,很高兴知道提升已经涵盖了很多方面。 tr1中的许多库基本上都是直接从boost原型中调整而来,因此经过了尝试和测试。不同之处在于它们已被移入std :: tr1命名空间(而不是boost)。

    您需要做的就是将以下内容添加到编译器默认include search path

    <boost-install-path>/boost/tr1/tr1
    

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

    例如:

    要使用std :: tr1 :: share_ptr,您只需要包含&lt; memory&gt;。这将为您提供包含一个文件的所有智能指针。

答案 1 :(得分:17)

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

答案 2 :(得分:15)

99%便携式。

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

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

值得!!

答案 3 :(得分:13)

你得到了很多C ++ 0x中的东西。但除了这种一般性之外,一些更好的细节是一个简单的regex library,一个casting from strings to ints的投射库(Lexical cast):

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

A date/time library等等......

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

还有Python interface(Boost Python),lexer/parser DSL(提升精神):

// A grammar in C++ for equations
group       = '(' >> expression >> ')';
factor      = integer | group;
term        = factor >> *(('*' >> factor) | ('/' >> factor));
expression  = term >> *(('+' >> term) | ('-' >> term));

这只是表面上的......

答案 4 :(得分:12)

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

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

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

答案 5 :(得分:11)

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

你可以get started with boost here

答案 6 :(得分:6)

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

答案 7 :(得分:4)

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

这是C ++应该附带的东西!许多Java的受欢迎程度是随标准库一起提供的,可以为您提供所需的一切。不幸的是,C ++只继承了有限的C / Unix标准函数。

答案 8 :(得分:4)

shared_ptrweak_ptr,特别是在多线程代码中,单独值得安装boost。 BOOST_STATIC_ASSERT对于编译时逻辑检查来说也很酷。

boost中的很多类和实用程序都在头文件中,这意味着你可以获得很多功能,而不需要编译任何东西,这也是一个优点。除非您使用极其旧的编译器,否则可移植性通常不是问题。我曾试图让MPL与VC6一起工作,它在完全爆炸之前打印出40,000个警告/内部错误。但总的来说,无论您的平台或编译器供应商如何,大多数库都应该可以工作。

考虑到来自Boost的很多东西已经在TR1中,并且很可能会出现在C ++标准库的下一个版本中。这是一个非常大的支持。

答案 9 :(得分:3)

Boost是一个非常广泛的(通常)通用构造库,几乎可以在任何应用程序中提供帮助。这可以通过C ++ 0x规范中包含许多boost组件这一事实来证明。

它至少可以在主要平台上移植,并且几乎可以移植到任何符合标准的C ++编译器。

唯一的警告是,boost库之间可能存在许多混合的依赖关系,这使得选择要分发的特定组件(整个boost库除外)变得更加困难。

答案 10 :(得分:3)

以上所有,加上它鼓励了许多现代的,最佳实践的C ++技术。它往往会提高代码的质量。

答案 11 :(得分:1)

另请注意,大部分提升都是模板,因此不需要建筑物 (只包括正确的头文件)。

需要建造的少数部件是可选的:
这些都可以独立构建,从而防止不必要的代码不必要的膨胀。