为什么需要泛型
为什么需要泛型
前言
泛型程序最早出现1970年代的
CLU
和Ada
语言中, 后来被许多机遇对象和面向对象的语言锁采用 1993年C++
在3.0版本中引入的模板技术就属于泛型编程 1994年7月ANSI/ISO C++
标准委员会通过的STL
更是泛型编程的集大成者, 它已被纳入1998年9月C++
标准之中. 2004年9月Java
在J2SE 5.0(JDK 1.5)
中开始使用泛型技术; 2005年11月C# 2.0
和Visual Basic .NET 2005
采用了在微软.NET
框架2.0版中所引入的泛型方法1971年,
Dave Musser
首先提出并推广了泛型编程的理论, 但是主要局限于软件开发和计算机代数领域. 1979年,Alexander Stepanov
开始研究泛型编程, 认识到泛型编程的巨大潜力, 提出了STL
的体系结构.1993年11月, 受贝尔实验室
Andrew Koening
的邀请,Stepanov
在ANSI/ISO C++
标准委员会的会议上, 介绍了泛型编程的理论和他们的工作.Stepanov
和Meng Lee
按委员会的要求, 于1994年3月提出了STL
的草案. 委员会提出了一些修改意见, 其中最重要的是对关联容器的扩充, 由Musser
完成了扩充部分的实现工作. 1994年7月,ANSI/ISO C++
标准委员会终于通过了修改后的STL
方案.参考书籍:
- 为什么需要泛型
下面的swapTwoInts(_:_:)
是一个标准的Swift
非泛型函数, 用于交换两个Int
类型的值
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
如果你想要交换两个String
类型的值, 或者两个Double
类型的值, 你只能再写更多的函数, 比如下面的swapTwoStrings(_:_:)
和swapTwoDoubles(_:_:)
函数:
func swapTwoStrings(_ a: inout String, _ b: inout String) {
let temporaryA = a
a = b
b = temporaryA
}
func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
let temporaryA = a
a = b
b = temporaryA
}
swapTwoInts(_:_:)
、swapTwoStrings(_:_:)
和swapTwoDoubles(_:_:)
函数体是一样的. 唯一的区别是他们接收值类型不同(Int
、String
和Double
).
而通过泛型, 我们就可以简化成一个通用函数覆盖到这些重复的代码.