读书人

泛型如何理解

发布时间: 2013-03-20 15:25:24 作者: rapoo

泛型怎么理解
求高手指教 泛型怎么理解??
[解决办法]
http://www.amazon.com/Generic-Programming-STL-Extending-Standard/dp/0201309564
这本书讲解的很详细



引用:
其实就是更复杂的宏,可以把模板当作类型(也可以是数值)替换,但是又不会发生宏参数替换时的隐晦错误,也不受行数限制。
当模版参数不能满足编译的时候就发生错误。

比如模板中有一句
T t;
t.c_str()
很明显,模版参数为string是可以编译的,而int就不行了。

强烈建议不要把template当成macro解释
因为有很多新人会被搞混
[解决办法]
泛型不是模板,反之亦然。
泛型是一种编程范式,模板是一种语言特性。

对于C++来说,他们之中只有部分交集的地方,不是所有使用模板的地方都能称之为泛型,也不是所有的泛型都必须用模板来实现。C++对泛型的支持并不是很好,至少,它缺乏太多的runtime泛型的能力,但是,C++的模板又是足够强大的,强大到它比泛型更复杂,并且还能够支持另外一种编程范式:元编程。

初略的领会泛型和模板的关系,可以简单的以OOP和class来进行类比。对于c++的class来说,也只是支持了OOP的一部分,至少,事件就没有支持,但是他又足够强大,强大到有仿函数一说。

BTW,C语言也支持泛型,想想它的void *,可以用来实现很多泛型函数,并且还是runtime泛型。
[解决办法]
引用:
同理,就如我在15楼说的

引用c++的generic,能根据不同的type,产生出不同的代码
如果那个type本身支援动态多型而且满足我们的concepts
那么我们所写的generic algorithms或containers
就具备了动态多型的能力

这不代表用template实现地generic algorithms或containers
具备动……


C++的template不可能实现runtime泛型,你所说的动态多型的能力实际上是指OOP的多态。C++的模板编译期就完成了实例化,任何generic algorithms或containers在运行期就跟普通算法和普通容器没有任何区别,此时实际上就是OOP的多态了。

另外,我不知道你为什么强调C++的generic,再重复一下我说过的话:
泛型不是模板,反之亦然。
泛型是一种编程范式,模板是一种语言特性。

对于C++来说,他们之中只有部分交集的地方,不是所有使用模板的地方都能称之为泛型,也不是所有的泛型都必须用模板来实现。C++对泛型的支持并不是很好,至少,它缺乏太多的runtime泛型的能力,但是,C++的模板又是足够强大的,强大到它比泛型更复杂,并且还能够支持另外一种编程范式:元编程。

初略的领会泛型和模板的关系,可以简单的以OOP和class来进行类比。对于c++的class来说,也只是支持了OOP的一部分,至少,事件就没有支持,但是他又足够强大,强大到有仿函数一说。

读书人网 >C++

热点推荐