【发布时间】:2010-09-14 00:54:35
【问题描述】:
自从我开始使用这个网站以来,我不断听到关于 Boost 库的消息。我想知道 Boost 库有哪些主要优点(因此我为什么要使用它)以及 Boost 库的可移植性如何?
【问题讨论】:
自从我开始使用这个网站以来,我不断听到关于 Boost 库的消息。我想知道 Boost 库有哪些主要优点(因此我为什么要使用它)以及 Boost 库的可移植性如何?
【问题讨论】:
Boost 由标准委员会的几名成员组织。
因此,它是下一个标准中图书馆的温床。
随着 tr1 即将推出,很高兴知道 boost 已经覆盖了很多领域。 tr1 中的很多库基本上都是直接从 boost 原件改编而来的,因此已经过尝试和测试。不同之处在于它们已被移入 std::tr1 命名空间(而不是 boost)。
您需要做的就是将以下内容添加到您的编译器默认include search path:
<boost-install-path>/boost/tr1/tr1
然后当你包含标准头文件时,boost 会自动将所有需要的东西导入命名空间 std::tr1
要使用 std::tr1::share_ptr 你只需要包含
【讨论】:
您只需阅读Boost Background Information 页面即可快速了解为什么应该使用 Boost 以及可以将其用于什么用途。值得花几分钟时间。
【讨论】:
99% 便携。
我会说它有很多库,一旦你发现了通过 boost 解决的需求,它们就会非常有用。您可以自己编写代码,也可以使用非常可靠的库。 拥有像 Multi-Index、Lambda、Program Options、RegEx、SmartPtr 和 Tuple 这样的现成资源真是太棒了……
最好的办法是花一些时间浏览不同库的文档并评估它是否对您有用。
值得!!
【讨论】:
Boost 很棒,但只是在这里玩 Devil's Advocate 是您可能不想使用 Boost 的一些原因:
所有这一切并不意味着即使您不按原样使用 Boost,您也不应该查看 Boost 代码并自己获得一些想法。
【讨论】:
你会得到很多 C++0x 中的东西。但除了一般性之外,一些更好的细节是一个简单的regex library,casting from strings to ints 的转换库(词法转换):
int iResult = 0;
try
{
iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
cout << "Unable to cast string to int";
}
一个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(Boost Spirit):
// A grammar in C++ for equations
group = '(' >> expression >> ')';
factor = integer | group;
term = factor >> *(('*' >> factor) | ('/' >> factor));
expression = term >> *(('+' >> term) | ('-' >> term));
这只是表面上的问题......
【讨论】:
Boost 是 C++ 库的集合。其中 10 个包含在 C++0x 的 tr1 中。
【讨论】:
Boost 是一组高质量的同行评审 C++ 库,它们强调可移植性和正确性。它是语言和标准库新增功能的事实上的试验场。查看他们的网站了解更多详情。
【讨论】:
Boost的优势:
它广泛可用,可移植到任何现代 C++ 编译器或任何平台。
这些功能与平台无关,您不必为每个新框架学习新的线程设计。
它以标准的方式封装了很多平台特定的功能,例如文件系统。
这是 C++ 应该附带的! Java 的很多流行之处在于它附带了一个标准库,可以做几乎所有你想做的事情。不幸的是,C++ 只继承了有限的 C/Unix 标准函数。
【讨论】:
shared_ptr 和 weak_ptr,尤其是在多线程代码中,单独值得安装 boost。 BOOST_STATIC_ASSERT 也非常适合进行编译时逻辑检查。
boost 中的许多类和实用程序都在头文件中,这意味着您无需编译任何东西就可以获得很多功能,这也是一个优点。可移植性通常不是问题,除非您使用非常旧的编译器。我曾经尝试让 MPL 与 VC6 一起工作,它在完全爆炸之前打印出 40,000 个警告/内部错误。但总的来说,无论您的平台或编译器供应商如何,大多数库都应该可以工作。
考虑到 Boost 中的很多东西已经在 TR1 中,并且很可能会出现在 C++ 标准库的下一个版本中。这是一个相当大的认可。
【讨论】:
Boost 是一个非常广泛的(通常)通用结构库,几乎可以在任何应用程序中提供帮助。这可以从 C++ 0x 规范中包含许多 boost 组件的事实来证明。
它至少还可以在主要平台上移植,并且应该可以移植到几乎任何具有大多数标准兼容 C++ 编译器的东西。
唯一的警告是,boost 库之间可能存在很多混合的依赖关系,这使得只挑选一个特定的组件来分发(而不是整个 boost 库)变得更加困难。
【讨论】:
以上所有,再加上它鼓励了许多现代的、最佳实践的 C++ 技术。它往往会提高代码的质量。
【讨论】:
另请注意,大多数 boost 是模板,因此不需要构建
(只包括正确的头文件)。
需要构建的少数部分是可选的:
这些都可以独立构建,从而防止不必要的代码出现不必要的膨胀。
【讨论】: