因为我已经开始使用这个网站,我不断听到关于提高图书馆。我想知道什么是一些主要好处的提高库(因此为什么我应该使用它的)和如何便携式是提高图书馆?

有帮助吗?

解决方案

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

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

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

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

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

    例如:

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

其他提示

您只需阅读提升背景信息页面即可快速了解您应该使用的原因提升和你可以使用它。值得花几分钟。

99%便携式。

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

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

值得!!

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

int iResult = 0;
try
{
    iResult = lexical_cast<int>("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),一个 lexer / parser DSL (Boost Spirit):

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

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

提高是巨大的,但是只是玩魔鬼代言人这里有一些原因,你可能不想利用提升:

  • 不会有时无法编纂工作正在旧编译器。
  • 这往往增加了编制时间更多,比较少的模板的重办法。
  • 一些提高码的可以不做你认为它的作用。阅读的文档!
  • 模板滥用可能导致不可读的错误消息。
  • 模板滥用可能导致代码很难步骤,通过在调试器。
  • 这是血缘C++。下一个版本的提高可能不再汇编关于当前(老年)的编译器。

所有这并不意味着你不应该看看在提高码,并得到一些想法你自己甚至如果不采用提高,因为它是。

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

您可以在此处开始使用提升

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

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

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

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

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

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top