C++开源库

前阵子写了《C++ 的“武”和“功”》。谈到C++语言知识,属于“功”,而那些强大的C++库,属于“武”,属于十八般武艺。

这篇文章我首先把《白话C++》书中讲到C++库,及相关工具,简单做个介绍。这些库我是怎么为C++初学者挑出来的呢?

(一)、它们必须都是开源产品,又为什么要是开源的呢?


    1.1、十年前的国内C++学习者,可以完全不必理会开源库,但在几年,编程界中的人,如果敢无视开源力量,那真够火星的。从Java的各个流行的库,到Java语言(实现)自身也开源了,再看那些强大的动态语言:PHP、Python,Ruby,开源环境简直就是它们呼吸的空气。今天在Linux界吵得沸沸扬扬的Mono,就是开源.Net。C/C++其实才是开源的鼻祖。十五年前,会Borland的OWL,是大拿,十年前,会MS的MFC或Borland的VCL,就可以风光地混饭吃。现在呢?你还准备学哪个商业的库?


    1.2、当然也不是完全反对商业的库,但商业上的东西,自然就会有其厂商为它们大力推动。我们可以不去凑这个热闹。
 

    1.3 我在书上数据库的部分,主要讲C++如何使用MySQL,而不是Oracle或SQLServer。因为作为软件开发者,出于软件人的利益,我希望正版意识被人接受(无论开源的或商业的),并且我相信正版化是趋势,所以我不希望我的读者为了读我的书,去盗版或花数万甚至十数万去买数据库。或许有些商业软件提供学习版,但功能受限。

(二)、它们必须都是成熟的产品。

    或者背后有类似IBM这样的大公司在支持,比如xerces-c,或者在业界中许多成功的案例,像MySQL就是使用量天下第一的数据库。或者它们超长的发展史,已经通过无数应用被证明是稳定的,比如wxWidgets,在MaximumPC杂志最近评出的32个“每台新PC中最重要的应用软件”中,使用wxWidgets构建的,就占了5个。至于iconv所提供的编码转换,那是所有Linux发行版内置的基础组件。最后一点我想也很重要,所有我在书讲解的C/C++库及软件,都在本人最近5年的实际工作中使用过(顺带,我严格尊守了相关的开源协议)。

(三)、它们都是跨平台的产品。

   C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应用。当Java横行天下之后,MS又突然发力,搞出C#语言,有大片的曾经的C++程序员,(包括我)以为C++要就此沉沦,未料,这三年来,C++的生命力突然被严重地增强了。主力原因就是开源的软件、基础软件(比如并发原生支持,比如Android必定要推出原生的SDK)、各种跨平台应用(比如Firefox)的出现。如果我此时教各位局限于Windows下的C++,我该教什么呢?
 

(四)、它们必须是相对通用的库

   因为要推荐给最终专业及行业尚未确定的初学者,库就应该是“基础”型的,比如STL和boost。通用型的,比如用于解析XML的xerces-c或正则表达式,属于工具类,无论在做什么编程,都用得上。或者是乐趣型的,比如SDL。

    多说无用,上菜。


    STLC++标准模板库,呵呵,它也是开源的嘛。>>

    
wxWidgets :使用wxWidgets ,开发者可以基于同一套代码,为Win32, Mac OS X, GTK+, X11, Motif, WinCE等平台开发应用程序。wxWidgets库可以被C++, Python, Perl, and C#/.NET等开发语言使用。跟其它有些同样支持跨平台GUI开发工具不同,基于wxWidgets的应用,拥有真实本地化的视觉及使用效果——因为,wxWidgets使用(各)平台原生的控件,而不是简单通过贴图去模拟。wxWidgets是使用广泛的,自由的,开源的,成熟的。
    
    mysql / mysql++: 不用介绍吧。现在Oracle手里,但我很放心。

    boostC++准标准库,它是强大地,江湖称之“千锤百炼”。

    iconv /iconvpp : (C形式的编码转换函数库,及本书作者用C++语言对iconv的简单封装)


    xerces-c :个人认为最完整,最强大的XML解析库了,不是仅仅在开源库里,你尽管把商业的算在内。当然,它的变体,被IBM拿去卖钱的那个版本,多了数百兆的东东来支持各国编码转换,是更强大,但我觉得有小小的,开源的iconv在前不就够了?

    
xsd (XML 与 C++数据结构的绑定工具)。(商业使用要钱)

    
deelx (轻量级的正则表达式解析类库,国产),boost里有强大的正则表达式解析库,但如果你只想要一个表达式解析,不想要拖上庞大的boost库时……支持一下国货。

    SDL (Simple DirectMedia Layer/多媒体直接访问层,用于游戏编程)。

    gSOAP SOAP协议的C++支持库及代码生成工具。

 

 

    ACE   大型网络编程的首选库。

 

    BCG  Windows平台下界面设计的第三方库,可以让你的界面更美好,更具时  代感。

  
    看起来,这些库功能都强大的,又是开源的,真是天上掉馅饼了?也不是,代价就是,你必须熟悉开源C++的规则,通常它们就是源代码,你必须自己编译它们。为此《白话C++》里,专文一章,用来讲解如何编译、安装各类的库及软件。但对缺少经验,奇怪问题总是会有,很多读者会有怨言了。C++好复杂啊!开始退缩了,我真的需要学习这么库吗?我光学习C++语言不行吗?坦白地讲,光学习任何语言都不行。学一个java能有什么公司要你?如果你不会它的任何框架,一个Python语言真的那么强大的?如果剥掉它那来自五湖四海的众多库。

     好吧,很多人决定坚持下来,但他们问我,我的坚持有没有意义,我即将受的苦,对我有没有好处?这就是说,大家会把这些“库”的学习,不知不觉地,当成了负担!精力上的,及心理上的负担。所以,接下来,我说说我的看法:学习库,是有累的地方,但更多的是好处。

    任何人学习语言的过程,其实都不仅仅是“学”,而应该还有一个“习”。所谓,“习”,就是并不是简单的“练习”,而是“应用”。不是吗?就像学习英语,如果光抱着书大啃,只用来应付考试可能没事,但会学习得很苦。如果学一点就能找老外说一点,肯定会很有乐趣,并且进展神速——我说这话可不是凭想像!那是完全有根据了。去年因为大学生交换,我手下交换来一位德国漂亮女生,会说英语。我每天带她去吃午饭,又有动力,效果又好啊。:)

    前面那些库,有做界面的,有数据库的,有做游戏的,有XML解析的,有SOAP协议,还有一些没举出的,线程,网络……光学C++语言本身,没有这些,我们的乐趣从何而来?我们的成就感从何而来?光是那个黑黑的控制台里的字符界面吗?“Hello world”带给C++初学者的乐趣,窃以为能持续一个下午,就不错了。

    可能学编程中的,是有人会走“苦行僧”路线,那种路线具体效果如何,我不了解,我自己学编程,都会学一点点,就会想写个小工具什么来的,一来在应用中验证和巩固一下刚学的知识,二来还会从中发现自己缺少的知识点,然后带着问题去学习后面的新内容。

    学习肯定是要兴趣的,如果仅仅说,“应用”就是为了培养学习者的“兴趣”,那还是低估了应用的作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值