boost是一个准标准库,相当于STL的延续和扩充,它的设计理念和STL比较接近,都是利用泛型让复用达到最大化。不过对比STL,boost更加实用。 STL集中在算法部分,而boost包含了不少工具类,可以完成比较具体的工作。boost主要包含一下几个大类:字符串及文本处理、容器、迭代子(Iterator)、算法、函数对象和高阶编程、泛型编程、模板元编程、预处理元编程、并发编程、数学相关、纠错和测试、数据结构、输入/输出、跨语言支持、内存相关、语法分析、杂项。 有一些库是跨类别包含的,就是既属于这个类别又属于那个类别。
在文本处理部分,conversion/lexcial_cast类用于“用C++”的方法实现数字类型和字符串之间的转换。 主要是替代C标准库中的 atoi、 itoa之类的函数。当然其中一个最大的好处就是支持泛型了。
format库提供了对流的“printf-like”功能。printf里使用%d、%s等等的参数做替换的方法在很多情况下还是非常方便的,STL的iostream则缺乏这样的功能。format为stream增加了这个功能,并且功能比原始的printf更强。
regex,这个不多说了,正则表达式库。如果需要做字符串分析的人就会理解正则表达式有多么有用了。
spirit,这个是做LL分析的框架,可以根据EBNF规则对文件进行分析。(不要告诉我不知道什么是EBNF)。做编译器的可能会用到。一般人不太用的到。
tokenizer库。我以前经常在CSDN上看到有人问怎么把一个字符串按逗号分割成字符串数组。也许有些人很羡慕VB的split函数。现在,boost的tokenizer也有相同的功能了,如果我没记错的话,这个tokenizer还支持正则表达式,是不是很爽?
array: 提供了常量大小的数组的一个包装,喜欢用数组但是苦恼数组定位、确定数组大小等功能的人这下开心了。
dynamic_bitset,动态分配大小的bitset,我们知道STL里有个bitset,为位运算提供了不少方便。可惜它的大小需要在编译期指定。现在好了,运行期动态分配大小的bitset来了。
graph。提供了图的容器和相关算法。我还没有在程序中用到过图,需要用的人可以看看。
multi_array提供了对多维数组的封装,应该还是比较有用的。
并发编程里只有一个库,thread,提供了一个可移植的线程库,不过在Windows平台上我感觉用处不大。因为它是基于Posix线程的,在Windows里对Posix的支持不是很好。
接下来的 数学和数值 类里,包含了很多数值处理方面的类库,数学类我也不太熟,不过这里有几个类还是很有用的,比如rational分数类,random随机数类,等等。
static_assert,提供了编译器的assert功能。
test库,一个单元测试框架,非常不错。
concept_check提供了泛型编程时,对泛型量的一点检查,不是很完善,不过比没有好。
数据类型类any,一个安全的可以包含不同对象的类。把它作为容器的元素类型,那么这个容器就可以包含不同类型的元素。比用void *要安全。
compressed_pair,跟STL里的pair差不多。不过对空元素做了优化。
tuple,呵呵,也许是某些人梦寐以求的东西。可以让函数返回多个值。
跨语言支持:python,呵呵,好东东啊,可以将C++的类和函数映射给python使用。以下为几个CSDN上的关于boost.python的中文资料:http://dev.csdn.net/article/19/19828.shtm,http://dev.csdn.net/article/19/19829.shtm,http://dev.csdn.net/article/19/19830.shtm,http://dev.csdn.net/article/19/19831.shtm
pool:内存池,呵呵,不用害怕频繁分配释放内存导致内存碎片,也不用自己辛辛苦苦自己实现了。
smart_ptr:智能指针,这下不用担心内存泄漏的问题了吧。不过,C++里的智能指针都还不是十全十美的,用的时候小心点了,不要做太技巧性的操作了。
date_time,这个是平台、类库无关的实现,如果程序需要跨平台,可以考虑用这个。
timer,提供了一个计时器,虽然不是Windows里那种基于消息的计时器,不过据说可以用来测量语句执行时间。
uitlity里提供了一个noncopyable类,可以实现“无法复制”的类。很多情况下,我们需要避免一个类被复制,比如代表文件句柄的类,文件句柄如果被两个实例共享,操作上会有很多问题,而且语义上也说不过去。一般的避免实例复制的方法是把拷贝构造和operator=私有化,现在只要继承一下这个类就可以了,清晰了很多。
value_initialized:数值初始化,可以保证声明的对象都被明确的初始化,不过这个真的实用吗?似乎写这个比直接写初始化还累。呵呵,仁者见仁了。
这里面除了regex、python和test需要编译出库才能用,其他的大部分都可以直接源代码应用,比较方便。其实这些库使用都不难。最主要的原因是有些库的使用需要有相关的背景知识,比如元编程、STL、泛型编程等等。
◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎ 概要
这个概要将帮助你开始利用Boost库。通过如下的步骤来取得、生成、安装Boost。下面是生成安装Boost的概要
1 | Boost库通过SourceForge文件发布系统来进行发布。可以 从SourceForge下载得到Boost发行版. 并把它解压缩到一个合适的地方。 |
你从网站上可以得到Boost发行版的所有的库和其他文档。他们被打包为ZIP, TAR.GZ, and TAR.BZ2 文件格式。 (在这里)既可以得到老的版本。
也可以从 CVS 库同步到当前 Boost最新的快照版本。文 本文件的行结束符如果打包为.zip 作为被每一个库开发者支持的(东西)(Text file line endings in the .zip file are as supplied by each library developer),在windows下面工作很好,在linux/unix下面就没那么漂亮了。.tar.gz和.tar.bz2支持对于 linux/unix更友好的文件换行符
.tar.gz 格式在Unix/Linux下面被广泛的支持。一些Windows的压缩/归档工具也可以顺利读取。因为gzip文档把所有文件看成一个文档压缩,所以要比分别压缩文件的zip压缩出来的文档要小一些。
.tar.bz2 格式在Unix/Linux下面被广泛的支持。并且其还被整合到一些tar工具中,这个格式采用了和.tar.gz不同的压缩方法。所以其可以创建更加小的文件。
为了在Unix/Linux环境下更容易的使用,Text文件换行符,在.tar.gz和.tar.ba2文件中已经被转换成一个新行。
所有的Boost文档,包括实体发行树(代码),包括网站HTML文档都被CVS服务器管理。(Boost网站)提供了命令行,GUI,浏览器访问方式。
(Boost)库可以从对那些安装了CVS客户端的,可以去访问公共Boost CVS 仓库。Unix/Linux环境的用户可以使用命令行来访问,Windows,Mac或者其他环境的用户则可以通过GUI来访问。
请参考改良过的SourceForgeCVS使用指南第F节。它包含了各种各样的客户端的访问链接。
常规的访问方法如下:
cvs -d:pserver:[email protected]:/cvsroot/boost login
[Hit <return> when it asks for a password]
cvs -z3 -d:pserver:[email protected]:/cvsroot/boost checkout boost
cvs -d:pserver:[email protected]:/cvsroot/boost logout
请阅读你的CVS手册来获得更多的信息。
这种访问是只读的;如果你是一个库的作者并且打算向CVS提交代码,请联系 相关人员。
一些Boost文档产生自CVS仓库里面的BoostBook XML 代码,这些代码并没有被转换成可以阅读的HTML参考文档。可以访问 Nightly Generated 文档来查看通过"nightly build"生成的HTML文档。
Boost推荐使用Boost.Build(Boost编译生成系统)来生成安装Boost库。 本文档剩下的部分解释它的用法。但是用不用这个系统就看你的需求了。注意,一些虽然库同样也包含了非Boost.Build的make文件或者工程文件。 但是Boost.Build却包含了构建Boost所需要的全部文件。
2 | 这个生成系统使用Boost.Jam,一个 Perforce Jam 扩展版本--这是make 一种轻量级的替代品。 推荐你去SourceForge 下载一个Boost.jam的可执行文件 如果你所使用的环境没有预先编译好的可执行的Boost.Jam或者如果你在使用一个还没有发布的Boost源码。那么你就需要 从代码手动生成bjam , 而bjam的代码也包含在Boost的源码树里面。编译好Boost.Jam以后,把bjam的执行文件放在你的Boost根目录下面就可以了。 |
在使用Boost.Build之前,你需要指定编译工具,有两种方法可以做到使得Build.System正常的工作。
bjam
时声明, 知道定义好这个变量, 那些被用到的变量会被自动的找到并且设置好。这个变量就是-s,例如: 3 | 下面是Boost.Build支持的编译工具,为了配置 那些工具,可以点击最左边的名字的链接。 |
编译工具名 | 说明 |
borland |
Borland C++ |
como |
Comeau C++ compiler front-end for non-Windows platforms |
como-win32 |
Comeau C++ compiler front-end for Windows, using Microsoft Visual C++as a back-end. |
cw |
Metrowerks CodeWarrior Pro 6.x, 7.x, 8.x, and 9.x command-line tools |
darwin |
Apple Darwin OS hosted GNU GCC |
dmc |
Digital Mars C++. |
dmc-stlport |
Digital Mars C++, using the STLport standard library implementation |
edg |
Edison Design Group compiler front-end (evaluation version) |
gcc |
GNU GCC on Unix and Cygwin. |
gcc-stlport |
GNU GCC on Unix and Cygwin, using the STLport standard library implementation |
gcc-nocygwin |
GNU GCC Cygwin command line compiler tools running in "no-cygwin" mode (produces commercially redistributable objects) |
intel-linux |
Intel C++ for Linux |
intel-win32 |
Intel C++ for Windows using the Dinkumware standard library in the Intel-required Microsoft Visual C++ 6 or 7 installation |
kcc |
KAI C++ |
kylix |
Borland C++ for Linux (Kylix). |
mingw |
GNU GCC and associated tools in MinGW configuration (produces commercially redistributable objects) |
mingw-stlport |
GNU GCC and associated tools in MinGW configuration (produces commercially redistributable objects), using the STLport standard library implementation |
mipspro |
SGI MIPSpro C and C++ |
msvc |
Microsoft Visual C++ version 6 command-line tools. NOTE; For version 7.x (the .NET series) use the vc7, vc-7_1, or vc-8_0 toolsets below. |
msvc-stlport |
Microsoft Visual C++ version 6 command-line tools, using the STLport standard library implementation. NOTE; For version 7.x (the .NET series) use the vc7-stlport or vc-7_1-stlport toolsets below. |
sunpro |
SunPRO C++ compiler |
tru64cxx |
Compaq C++ for Tru64 UNIX (versions prior to 6.5) |
tru64cxx65 |
Compaq C++ Version 6.5 for Tru64 UNIX |
vacpp |
IBM Visual Age C++ command-line tools |
vc7 |
Microsoft Visual C++ command-line tools from Visual Studio .NET. |
vc7-stlport |
Microsoft Visual C++ command-line tools from Visual Studio .NET + STLPort. |
vc-7_1 |
Microsoft Visual C++ command-line tools from Visual Studio .NET 2003. |
vc-7_1-stlport |
Microsoft Visual C++ command-line tools from Visual Studio .NET 2003 + STLPort. |
vc-8_0 |
Microsoft Visual C++ command-line tools from Visual Studio .NET 2005. |
共同的编译安装处理流程都是被top-level build文件(Jamfile)驱动的。
4 | 首先你需要进入你的Boost发行版的目录,例如:
|
默认情况下,Boost将试图编译全部的库并且把库和头文件安装到默认的路径中去。 在Unix系统中,默认的路径是"/usr/local"。 而Windows系统则是 "C:/Boost"。Boost库将会被安装到这些文件夹的“lib”子文件夹下面。 而头文件则会被安装到"<include/boost-1_33>"子文件夹里面。所有的这些设定都是来源于你所用的系统。
5 | 调用build system,指定 编译工具来安装,比如说,GNU/GCC。
如果你只打算生成库并且把编译好的库收集到一个文件夹里面而不打算安装它们。
|
这个编译和安装系统可以通过一个GNU风格的参数集合来控制。这些命令参数可以允许你指定安装目录,不安装某一个库, 下面是这些命令和参数的一些介绍。你还可以用bjam --help"来查看这些参数。
bjam [options...] [install|stage]
动作(命令) | |
---|---|
none | 只生成Boost库,这个命令是让你做install命令的第一个步骤用的。 这个命令通常不会拷贝生成好的库到安装目录。 |
install | 编译安装Boost的库和头文件。 |
stage | 生成Boost库并且把生成物拷贝到一个文件夹中。 |
参数 | |
--help | 显示命令的一些参数和语法的一些概要。 |
-sTOOLS=<toolsets> | 指定编译工具集列表,通常只需要一个编译工具。 |
--prefix=PREFIX | 安装的目标文件夹。 Win32默认: C:/Boost Unix、Linux等默认: /usr/local |
--exec-prefix=EPREFIX | Install architecture dependent files here.(这个是做啥的不知道) 默认; PREFIX |
--libdir=DIR | 安装库的目标文件夹。 默认: EPREFIX/lib |
--includedir=DIR | 安装代码头文件的文件夹,Boost头文件夹将会安装在定义的文件夹的 "boost-<version>" 里面。 默认: PREFIX/include |
--builddir=DIR | 指定使用的生成文件夹,这将编译代码时产生的中间文件放到一个指定的路径下而不用和代码混在一起。 推荐! |
--stagedir=DIR | 如果只是使用state生成库文件,这个变量指定这些库将会被放在哪里。 默认; ./stage |
--without-<library> | 指定不编译,安装的库。 |
--with-<library> | 指定编译、生成的库,这个变量改变默认的生成所有的库的设定,而 生成指定的库。 |
--with-python-root[=PYTHON_ROOT] | 用指定的Python开发包生成Boost.Python库,PYTHON_ROOT代表Python的开发包的目录。 Boost.Python只在提供的PYTHON_ROOT有效的情况下才被编译。 Win32环境默认: C:/Python24 Unix,Linux , Cygwin环境默认:/usr |
--with-python-version[=2.4] | 生成Boost.Python库的Python的版本。 默认: 2.4. |
--with-pydebug | 用Python的调试运行环境编译Boost.Python。 这是用Python的调试版来生成一个库的附加集合。而同时,常规的Boost.Python也会被生成。 |
-sHAVE_ICU=1 | Boost.Regex的Unicode版本依赖于ICU 库。 而这个库一定要在同一个编译器下面生成并且安装到编译器所能找到的include和lib文件夹下面。 请参考 the Boost.Regex 安装文档. 获得更多的信息。 |
-sICU_PATH=path | Boost.Regex的Unicode版本依赖于ICU 库。而这个库一定要在你所使用的同一个编译器下面生成,如果你在安装ICU的时候使用的prefix为 --prefix=/usr/local/icu/3.3,那么在这里,你就可以设置 -sICU_PATH=/usr/local/icu/3.3. 请参考 Boost.Regex 安装文档. 获得更多的信息。 |
-sNO_COMPRESSION=1 | 生成Boost.Iostreams库的时候不使用外部的zlib和libbz2来生成压缩库。 如果你用Windows,那么这个选项默认为1(就是不生成压缩库);如果你用unix,则压缩库很有可能默认就被生成了,所以如果这个参数不起作用, 你可以参考Boost.Iostreams安装文档 |
这里有一些 Boost.Build 和 Boost.Jam 支持的附加参数。其中最重要的可能就是"-sBUILD="。 这个参数允许你覆盖默认的编译目标。参数值"<features/variants>" 是一个用空格分隔的列表。features以一个tag和一个或多个值的方式出现;variant则是features集合做附加说明的一个简单的符号名 字。例如默认的编译目标是 "debug release <runtime-link>static/dynamic <threading>single/multi" 其中"debug" 和 "release"就是variant,那么每一个features都会带有这两个variant.
如果你有些关于编译安装处理的一件。请写信给Boost.Build mailing list 我们会认真的阅读您提出的意见。
生成物包括:静态库,动态库,而不同的环境会让库的名称也不一样。一个简单的Boost库默认将会产生八个不同的库。 例如Boost.Datetime库在Unix 类系统下面将会被处理成:
|
||||||||||||
lib |
|
|||||||||||
boost_date_time |
|
|||||||||||
- | gcc |
|
||||||||||
- | mt |
|
||||||||||
- | d |
|
||||||||||
- | 1_31 |
|
||||||||||
.a |
一些系统要求库应该具有“lib”前缀,例如Unix,和其他的例如在Winodws运行的GCC,因此在所有的Unix类型的系统和Windows上使用的Boost静态库上面都会被加上这个前缀。 而Unix共享库,和windows静态库则被分别命名为
而Winodws的共享库则没有prefix前缀来区别“import libraries”和"static libraries"。因此在Windows下面, 共享库被命名为:
*.dll | 共享库版本 |
*.lib | dll(共享库)的"Import library" |
lib*.lib | "Static library"版本 |
Boost"会用boost_" 前缀来命名库用以区别您的系统上其他的库。
编译工具名字是你基于你所使用的的编译工具的缩写。这个缩写由编译器的名称(2-4个字符)和该编译器的大小出版号组成的。 。举一个例子如果你的编译工具是"gcc-3_2_3" 那么编译工具的tag就会是"gcc32"。各个编译器的缩写如下:
编译工具名称 | 缩写 |
borland |
bcb |
como |
como |
como-win32 |
como |
cw |
cw |
darwin |
osx |
dmc |
dmc |
dmc-stlport |
dmc |
edg |
edg |
gcc |
gcc |
gcc-stlport |
gcc |
gcc-nocygwin |
gcc |
intel-linux |
il |
intel-win32 |
iw |
kcc |
kcc |
kylix |
bck |
mingw |
mgw |
mingw-stlport |
mgw |
mipspro |
mp |
msvc |
vc |
msvc-stlport |
vc |
sunpro |
sw |
tru64cxx |
tru |
tru64cxx65 |
tru |
vacpp |
xlc |
vc7 |
vc |
vc7-stlport |
vc |
vc-7_1 |
vc |
vc-7_1-stlport |
vc |
vc-8_0 |
vc |
Others | The first part of the toolset name. |
这个tag标志着这个库所支持的线程。如果多线程被支持,那么这个tag就会被加上"-mt",反之则不加。
这定义了编译好的库的“compiled against”的运行时类型和编译时其二进制编码目标。每一中运行时类型和和生成代码参数都用一个字母表示。
关键字 | 特征 |
s | 静态链接库 |
g | 调试运行库 |
y | 调试Python系统 |
d | 激活调试代码 |
p | STLport运行时库,代替宿主编译器的运行时库 |
n | STLport运行时库使用“本地”IO流代替STLportIO流 |
举一个例子,如果你用STLport和本地的IO流库来编译一个调试模式的库,那么这个库的命名就是 "-sgdpn"。
这标志着Boost库的版本号码。由主版本号和副版本号和一个下划线组成。例如1.31.0对应的就是
举一个例子,如果你用STLport和本地的IO流库来编译一个调试模式的库,那么这个库的命名就是 "-1_31"。如果这里面还包括了补丁号,比如说1.31.1,那么就命名为"-1_31_1"
这标识了库的类型,这时根据环境不同而不同的。在windows上面共享库是.dll 静态库则是".lib"。在unix上面静态库是".a",动态库是".so"。 一些编译工具在Unix还会支持全版本号(例如".so.1.31.0")的符号链接。
Boost拥有自动链接的特性,即:只要你include了库的头文件就可以链接到正确的库。 为了这个特性,你所使用的编译器一定要支持#pragma comment(lib, name)
Microsoft Visual C++, Intel C++, Metrowerks C++ , 和 Borland C++ 都支持这个)。
如果你链接到动态运行库,那么你可以选择链接到静态链接库和动态链接库的其中任意一个, 默认是静态链接,你可以定义 BOOST_WHATEVER_DYN_LINK宏 强制使Boost链接到动态链接库。
这个特性可以利用BOOST_WHATEVER_NO_LIB强制关闭,或者在Boost全局定义BOOST_ALL_NO_LIB
如果你打算观察库的链接情况,那么就可以定义BOOST_LIB_DIAGNOSTIC。 然后使用#pragma message
来观察选择库的情况。
这里有一些Boost库(Boost.Test 一个测试特例) 是不支持自动链接的,至于技术原因,请参考每一个库的文档,而 Boost.Config 文档提供了更多的配置macro的信息。 下面的列表是当前支持的配置 (只有头文件的库没有列在这里):
Library | Static Link | Dynamic Link | Default linkage | Automatic library selection | Comments | |
Date-Time | Yes | Yes | static | Yes | ||
Filesystem | Yes | Yes |
static | Yes | ||
Graph | Yes | No | static | No | The separate Graph library source is needed only when reading an AT&T graphviz file. | |
Iostreams | Yes | Yes |
static | Yes | ||
Program Options | Yes | Yes | static | Yes | ||
Python | Yes | Yes | dynamic | No | Since all Python extensions are DLL's it makes sense to dynamic link to theBoost Python library by default (static linking is only really an option if you are embedding python). | |
Regex | Yes | Yes | static | Yes | ||
Serialization | Yes | Yes | static | Yes | ||
Signals | Yes | Yes | static | Yes | ||
Test | Yes | No | static | No | Which library you link to depends upon which program entry point you define, rather than which Boost.Test features you use. | |
Thread | Partial | Yes | static (Visual C++), otherwise dynamic | Yes | For technical reasons static linking is supported on only one Windows compiler (Visual C++). | |
Wave | Yes | Yes | static | Yes |
根据环境的不同,你可能在安装配置Boost之前进行一些附加的配置。
Depending on your platform and configuration you may need to perform some additional configuration to get Boost to build and install.
Revised $Date: 2005/11/23 14:09:43 $
Copyright © Rene Rivera 2003.
Copyright © Jens Maurer 2001.
Copyright © John Maddock 2004.
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy atwww.boost.org/LICENSE_1_0.txt)
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=930489
在WindowsXP下 VC6.0 编译 安装 Boost库2006-12-08 12:34
(zz)
首先从
Boost的老巢
http://www.boost.org/下载。下载完成以后是一个
安装文件(其实就是进行自动解压缩的)。选择你的目录解压缩
Boost库。然后我们开始对其进行编译我所下载的版本是1.33.1。
1.cmd
2.进入
安装VC的目录例如c:/Program Files/Microsoft Visual Studio/
VC98/Bin目录
3.运行VCVARS32.BAT(这个操作的作用是对此控制台注册
VC的环境变量,这样我们就可以在任意目录使用cl进行编译程序)。
4.进入
Boost的目录例如c:/
boost_1_33_1/tools/build/jam_src
5.修改build.bat脚本的参数(如果必要的话,你的
安装目录不是c:盘)
将原参数
if EXIST "
C:/Program Files/Microsoft Visual Studio/
VC98/bin/VCVARS32.BAT" ( set
BOOST_JAM_TOOLSET=msvc set
BOOST_JAM_TOOLSET_ROOT=
C:/Program Files/Microsoft Visual Studio/
VC98/ goto :eof)
修改为(就是你的
VC6.0
安装的目录,我这里举个例子)
if EXIST "
D:/Program Files/Microsoft Visual Studio/
VC98/bin/VCVARS32.BAT" ( set
BOOST_JAM_TOOLSET=msvc set
BOOST_JAM_TOOLSET_ROOT=
D:/Program Files/Microsoft Visual Studio/
VC98/ goto :eof)
6.在刚才打开的控制台下运行
D:/d/
boost_1_33_1/tools/build/jam_src/
build.bat
最终会在目录下生成一个名为bin.ntx86的文件夹里面包含一个bjam.exe可执行文件,将其拷贝到
D:/boost_1_33_1目录下
7.
安装python可以在
www.python.org
获得
8.设置环境变量
SET MSVC_ROOT="c:/Program Files/Microsoft Visual Studio/
VC98" SET VISUALC="c:/Program Files/Microsoft Visual Studio/
VC98" SET JAM_TOOLSET=VISUALC SET PYTHON_ROOT=D:/Program Files/Python23 SET PYTHON_VERSION=2.3
9开始编译
bjam -sTOOLS=msvc install(将会
安装在默认目录C:/
Boost)
这样编译就完成了
10.
boost类库在
VC6.0的IDE环境中的配置
Tools” -> “Options” -> “Diretories” -> “Show Diretories for”中的下拉框选择: 1) 在Include files 中添加C:/
BOOST/INCLUDE/
BOOST-1_33_1/
BOOST目录。 2) 在Library files 中添加C:/
BOOST/LIB目录。
11.测试
如果你不能确定,你的编译是否成功。就需要进行一下测试,拿正则表达式类为例。
测试如下程序
#include "stdafx.h" #include <cstdlib> #include <stdlib.h> #include <
boost/regex.hpp> #include <string> #include <iostream>
using namespace std; using namespace
boost;
regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");
int main(int argc, char* argv[]) { std::string in; cmatch what; cout << "enter test string" << endl; getline(cin,in); if(regex_match(in.c_str(), what, expression)) { for(int i=0;i<what.size();i++) cout<<"str :"<<what[i].str()<<endl; } else { cout<<"Error Input"<<endl; } return 0; }
输入:select name from database;
输出:str:select name from table str:name str:table 这样就完成了
单个库编译方法:(以regex为例)
编译
boost.regex的另一种办法 1.运行vcvars32.bat,可以帮助设置好
vc命令行环境 2.cd
boost_1_33_1/libs/regex/build 3.nmake -
vc6.mak
这种方式可以只编译regex 这时会在当前目录下生成
vc6目录,里面有已编译好的lib和dll文件, 这样以后的步骤中可以设置regex库时指向这里, 包含文件需要设置到
boost_1_33_1目录 另修正补充: 用bjam编译regex时,选项-sTOOLS=
vc7中
vc7改成
vc71,否则下面最终生成工程时需要改个文件名( libboost_regex-
vc7-mt-sgd-1_33_1.lib -> libboost_regex-
vc71-mt-sgd-1_33_1.lib)
|