泛型函数

泛型函数也是可以重载的,其重载规则与普通函数的重载没有啥区别。另外,泛型一般都是放在头文件中的,这也包括它的泛型实现在内。

泛型函数还有第三种用法,那就是显式指定,如下图所示:

泛型函数_第1张图片
 

有的时候可以简写成:




因为有的时候编译器可以根据形参的类型推出显式指定的类型。

但是使用这种显示指定的泛型函数必须要以普通泛型的存在为前提。不同于一般的泛型算法,一般的泛型算法的实现基本相同只不过类型不同而已。但是如果你想实现一种完全不同于一般泛型的功能,而它的功能实现码是它自己独有的,你就需要显示特化。

而一般函数被调用的顺序是首先使用非泛型函数,然后考虑显式指定的泛型函数,最后没办法了再去使用普通的泛型函数。

须知泛型本身并不是函数的定义,它只不过是一个准备,预备式而已。而只有当有实参传进来的时候才能自动确定一个泛型函数的定义。但是现在你要做的是手动确定一个泛型函数的精确声明,那编译器遇到特定情况的时候就能直接找到这个手动指定的声明,并为之实现定义,这个时候你该怎么办,如下图所示。




和上面讲到的显式指定不同的是,它在template后面没有<>修饰。

这两者是有区别的。显式指定相当于使用另一个独立的函数,而后者是沿用泛型算法的机制,不过类型已经被你指定了而已。

你可能感兴趣的:(泛型函数)