函数模板的实例
#include <iostream> using namespace std; template<typename T> void myswap(T &a, T &b) { T t; t = a; a = b; b = t; } int main() { int x = 1; int y = 2; myswap(x, y); cout<<x<<" "<<y<<endl; myswap<int>(x, y); cout<<x<<" "<<y<<endl; char a = 'a'; char b = 'b'; myswap(a, b); cout<<a<<" "<<b<<endl; myswap<char>(a, b); cout<<a<<" "<<b<<endl; return 0; }
函数模板调用过程:先将函数模板实再化为函数,然后再发生函数调用
函数模板,只适用于函数的参数个数相同而类型不同,且函数体相同的情况。如果个数不同,则不能用函数模板。
普通函数会进行隐士的数据类型转换, 函数模板不提供隐式的数据类型转换必须是严格的匹配。
函数模板和普通函数的调用顺序
#include <iostream> using namespace std; int Max(int a, int b) { cout<<"Max 普通函数: "; return a > b ? a: b; } template<typename T> T Max(T a, T b) { cout<<"Max 函数模板: "; return a > b ? a: b; } int main() { cout<<Max(1, 2)<<endl; //当函数模板和普通函数都符合调⽤时,优先选择普通函数 cout<<Max<>(1, 2)<<endl; //如果想显⽰使⽤函数模板,则使⽤<>类型列表 cout<<Max(1.0, 2.0)<<endl; //如果函数模板产⽣更好的匹配,使⽤函数模板 return 0; }
1. 当函数模板和普通函数都符合调用时,优先选择普通函数
2. 若显示使用函数模板,则使用<> 类型列表
3. 如果函数模板产生更好的匹配,使用函数模板