//如果需要多个将同一种算法用于不同类型的函数,使用模板
//模板放在头文件中,在需要使用模板的文件中包含头文件
template < typename AnyType >//定义一个模板 typename可以用class代替
void Swap( AnyType &a, AnyType &b ){//交换两个AnyType值
AnyType temp;
temp = a;
a = b;
b = temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
int b = 2;
Swap( a, b );
cout<<a<<"\t"<<b<<endl;
string strK = "aaaa";
string strM = "bbbb";
Swap( strK, strM );
cout<<strK<<"\t"<<strM<<endl;
system("pause");
return 0;
}
//非模板函数 模板函数 显示具体化
//优先级:非模板函数>显示具体化>模板函数
非模板函数:
void Swap( int &, int & );
模板函数:
template < typename AnyType >
void Swap( AnyType &, AnyType & );
显示具体化:
template < typename AnyType >
template <> void Swap < int >( int&, int& )//显示具体化 -->不使用Swap()模板来生成函数定义,而应使用专门为float类型显式地定义的函数定义
{
return ;
}
显式实例化
template void Swap< int >( int&, int& ) //显示实例化 -->使用Swap()模板生成一个使用int类型的实例