
C++
C++将过多用于扩展自身特性的内容暴露给了用户。随便翻开一个STL头文件,估计90%自认为
C++水平还不错的人都会感到头疼。
C++中泛型编程、模板元编程是最难的部分,可要是不自己开发
C++语言扩展库的话,这部分内容毫无意义。为什么这么说?使用模板的话,必然是所有代码都在头文件里(All in Head),很多细节没法隐藏。所以靠卖行业库盈利的人绝对不会用模板来做接口。他们更愿意在库的内部使用
C++编写,而库对外则采用句柄化加上C接口的方式。这样既能确保跨编译器、跨语言使用,又能用一个void *句柄把细节隐藏起来。所以数学计算、视频编解码、数字信号处理、有限元、地理信息处理、CT和核磁共振成像相关的库很少会给用户提供一大堆庞大的泛型头文件。行业所处理的数据类型大多是单一、确定的,而不是泛化的。行业中的算法十分珍贵,加壳加密还怕被人反汇编,怎么可能直接写在泛型里提供给用户?自己扩展
C++语言才是泛型编程最主要的用途。模板元编程默认使用者非常熟悉
计算机专业的顶尖理论,擅长理解
计算机的语义词法,善于进行符号推理,但遗憾的是,大多数非编译器专业的人都没学过这些,所以觉得它很难。但实际上,如果不进行语言扩展,这部分内容根本就用不到。
C++委员会应该设置一个开关,分为应用模式和语言扩展模式,不要把这么多特性都暴露给用户。先不说原理,把STL容器当作简单对象来用还是很不错的。我们长期使用Qt
C++做系统,采用C接口做库,业绩相当不错。其实
C++用到一半的知识就足够应对很多情况了,主要依靠C语言的知识,再加上一些面向对象(OO)的思想(使用现成的库需要有初步的OO思想)。比起
C++那些像
茴香的茴字有几种写法一样钻牛角尖的知识,我认为要达到顶尖水平,最关键的不是你掌握了多少知识,而是以下三个充分:掌握好这三点,就算只用C语言也能表现出色。一个库如果能做到上述三点,哪怕只用到了少量
C++特性,也是一流的
C++库——Qt就是其中最优秀的库之一。