在Ubuntu上使用Boost

15

我之前听到过很多好评关于Boost,想尝试一下。于是我从Ubuntu 9.04的软件包管理器中下载了所有必需的包。但现在我遇到了一个问题,就是不知道如何使用这些库。

是否有人知道一个好的Boost教程,能从“Hello World”一直讲到高级主题,并且还包括如何在Ubuntu上使用g++编译程序?

8个回答

18

同意;boost网站大多数情况下都有很好的教程,按子库分解。

至于编译,库实现的80%定义在头文件中,使得编译变得微不足道。例如,如果您想使用shared_ptr,只需添加

#include <boost/shared_ptr.hpp>

按照通常的编译方式进行编译即可,不需要将库路径添加到g++命令中或指定-llibboost。只要boost目录在您的包含路径中,就可以了。
从boost文档中可以得知:
只有以下需要编译和链接的库: Boost.Filesystem Boost.IOStreams Boost.ProgramOptions Boost.Python(在构建和安装之前请参阅Boost.Python构建文档) Boost.Regex Boost.Serialization Boost.Signals Boost.Thread Boost.Wave 一些库具有可选的单独编译二进制文件: Boost.DateTime有一个二进制组件,仅在使用其to_string/from_string或序列化功能时或针对Visual C++ 6.x或Borland时才需要。 Boost.Graph还具有一个二进制组件,仅在您打算解析GraphViz文件时才需要。 Boost.Test可以以“仅头”或“分别编译”模式使用,但是建议严肃使用时进行单独编译。
因此,如果您正在使用列出的库之一,请使用入门指南来开始编译和链接到Boost。

5
Boost网站有一些不错的教程,只是它们有点“隐藏”。 点击这里可以查看。

3

我使用基于Ubuntu的Easypeasy 1.1(适用于上网本),通过Synaptic软件包管理器安装libboost-dev。然后只需添加以下内容:

#include "boost/foreach.hpp"

我能够替换现有应用程序中的现有行(该应用程序具有一个与boost无关的Ask类):
for (std::vector<Ask*>::iterator ii=ui.begin(); ii!=ui.end(); ++ii)
    std::cout << (*ii)->prompt() << (*ii)->answer() << std::endl;

使用:

BOOST_FOREACH (Ask* ii, ui)
     std::cout << ii->prompt() << ii->answer() << std::endl;

据我所知,这是仅限于头文件的功能。我尚未使用需要链接时更改的任何内容。

3
图书馆文档有好有坏。 一些很好,但有些更像是参考而不是指南。 (部分) Boost库的最佳指南是书籍《超越C++标准库》。 至少,介绍提供了许多库的一段描述。 从那里,您可以决定哪个库对当前需求最重要,如果它在书中,则可以阅读关于它的章节,或者在网站上阅读文档。
如果您会德语,那么有一个良好的在线指南。 Google翻译做得很好,以至于像我这样的非母语人士也能理解。
此外,除非您有丰富的C ++经验,否则我建议先从简单的库开始(例如smart_ptr,tuple,conversion,tokenizer,regex,date_time,test),然后再尝试更复杂的库(例如bind,variant,any),或者真正高级的库(concepts,MPL,Fusion)。

1

我刚刚看了那个德语的boost指南,发现还有一个英语版本(同一本书)。它看起来非常不错,我刚刚读了一些介绍页面,非常有用。


-1

-2
这些库都附带有文档,其中许多都包含了教程。只需开始阅读即可。

我的电脑上的Boost文件存储在哪里?我没有从Boost官网下载它们。 - Kredns
1
您可以使用软件包管理器查找文件位置。通常在 /usr/include/boost 和 /usr/lib/libboost_* 目录下。 - Johannes Schaub - litb
但是使用idown给我的教程,它无法编译。有没有办法可以使用g++的反引号功能? - Kredns

-2

Boost不是一种编程语言,也不是一个应用程序框架——因为它只是一组库的集合,所以不存在Boost“Hello World”程序。Boost中的大多数库可以更或少独立使用,并且它们的大小从一个函数到可以独立存在的大型库不等。

了解Boost的最佳方法就是在编写新代码时尝试使用它。每当可能时,请使用smart_ptr;下次想要进行编译时工作时,请使用MPL。Boost有很多变化,但您应该从Utility部分开始查看;那些是最轻量级和最常用的库。


下投票的理由:‘Hello World’ 可能是指一个过于简单的第一个示例,它连接了所有的管道。原始的 ‘Hello World’ C 程序需要用户能够访问计算机、创建程序源代码、保存、编译、链接、运行并检查结果。 - CW Holeman II

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接