泛型怎么理解
求高手指教 泛型怎么理解??
[解决办法]
http://www.amazon.com/Generic-Programming-STL-Extending-Standard/dp/0201309564
这本书讲解的很详细
强烈建议不要把template当成macro解释
因为有很多新人会被搞混
[解决办法]
泛型不是模板,反之亦然。
泛型是一种编程范式,模板是一种语言特性。
对于C++来说,他们之中只有部分交集的地方,不是所有使用模板的地方都能称之为泛型,也不是所有的泛型都必须用模板来实现。C++对泛型的支持并不是很好,至少,它缺乏太多的runtime泛型的能力,但是,C++的模板又是足够强大的,强大到它比泛型更复杂,并且还能够支持另外一种编程范式:元编程。
初略的领会泛型和模板的关系,可以简单的以OOP和class来进行类比。对于c++的class来说,也只是支持了OOP的一部分,至少,事件就没有支持,但是他又足够强大,强大到有仿函数一说。
BTW,C语言也支持泛型,想想它的void *,可以用来实现很多泛型函数,并且还是runtime泛型。
[解决办法]
C++的template不可能实现runtime泛型,你所说的动态多型的能力实际上是指OOP的多态。C++的模板编译期就完成了实例化,任何generic algorithms或containers在运行期就跟普通算法和普通容器没有任何区别,此时实际上就是OOP的多态了。
另外,我不知道你为什么强调C++的generic,再重复一下我说过的话:
泛型不是模板,反之亦然。
泛型是一种编程范式,模板是一种语言特性。
对于C++来说,他们之中只有部分交集的地方,不是所有使用模板的地方都能称之为泛型,也不是所有的泛型都必须用模板来实现。C++对泛型的支持并不是很好,至少,它缺乏太多的runtime泛型的能力,但是,C++的模板又是足够强大的,强大到它比泛型更复杂,并且还能够支持另外一种编程范式:元编程。
初略的领会泛型和模板的关系,可以简单的以OOP和class来进行类比。对于c++的class来说,也只是支持了OOP的一部分,至少,事件就没有支持,但是他又足够强大,强大到有仿函数一说。