用c++好多年了,自己感觉对它已经比较了解,但今天又一次学习boost时(为什么说又一次? 因为每次都不彻底,最后均放弃了), 不禁为它的魅力所倾倒,感叹自己对c++的了解的片面。下面列举几个使用boost库的例子,相信如果你没有看过类似代码的话,你一定也会很震惊。
boost是一个c++类库(好像说模板库更为合适),由C++标准委员会库工作组成员发起,是不折不扣的c++准标准库,内容涵盖了文件系统、线程、字符串、数值计算等等等等诸多方面。Boost功能之强大就不多说了,只是想借它的某些代码来给大家展示一下c++的魅力。
例1: 奇妙的赋值操作
复制内容到剪贴板
代码:
#include <vector>
#include <boost/assign.hpp>
using namespace boost::assign;
std::vector<int> v;
v += 1,2,3,4,5,6,7,8,9;
//相信吗?编译不会出错!例2: 接受任意类型数据的变量
复制内容到剪贴板
代码:
#include <string>
#include <boost/any.hpp>
boost::any v = 100;
v = 'c';
v = std::string("str");
v = false;
v = 0.3;例3: foreach
复制内容到剪贴板
代码:
#include <vector>
#include <iostream>
#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH
std::vector<int> arr;
// add_some_elements_to(arr);
foreach(int n, arr)
cout << n << endl;
// 是不是有点眼熟? oh, C# 的 "foreach" 例4: Bind与函数组合
复制内容到剪贴板
代码:
#include <boost/bind.hpp>
using namespace boost;
int f(int a) { return -a; }
int g(int a, int b) { return a + b; }
void main()
{
int r;
r = bind(g, 100, 200)(); //可以这样调用g(), r = 300
r = bind(g, _1, 200)(100); //r = 300
r = bind(g, _1, _2)(100, 200); //r = 300
r = bind(g, _1, _1)(100, 200); //r = 200
r = bind(f, bind(g, _1, _2))(100, 200); //r = f(g(x,y)) = 300
//是不是感觉有点像printf() ?
}例5: 最神奇的拉姆达表达式 (lambda expression)
复制内容到剪贴板
代码:
#include <boost/lambda/lambda.hpp>
using namespace boost::lambda;
int i = 1; int j = 2;
int r = (_1 + _2)(i, j); // r = 3
// ??? 是的,请相信你的眼睛,_1 下滑线和1好了,例子就先写到这吧,以后发现好的,再加上。(如果要安装boost,最快得 方法是下载
installer)
需要说明的是,这些例子不是用来表现boost有多强大,多好用,而是用来说明c++语言是的博大!(请一定区分语言和类库的概念)。有人肯定会说,有什么强大的,c++能实现的,XX语言都能实现。的确,有很多语言都很好。但c++的强大在于:所有上面演示的功能,不是通过修改编译器来实现的,只是利用了c++语言已有的特性。想想运行在全世界所有电脑上的软件都在基于什么运行,就能体会为什么C++标准多少年来未曾改变。
读了BOOST的代码后,渐渐的产生了一种感觉:
有一种语言,就像十七八岁的少年,处在模仿和多变的年龄,躁动着...
有一种语言,就像四十岁左右的中年人,在这个多变的世界,以自己稳固的步伐,前进着...
[
本帖最后由 stormelf 于 2008-1-9 03:14 编辑 ]