//通用模板
template<class T>
T min_( T a, T b)
{
printf("通用模板调用 ");
return a < b ? a: b;
}
//模板特化
typedef const char * PCP;
template<> PCP min_< PCP >( PCP s1, PCP s2)
{
printf("特化实例调用 ");
return ( strcmp(s1, s2) < 0 ? s1 : s1 );
}
int main(int argc, char* argv[])
{
//调用实例化 int min_(int a, int b)
printf("%d\n", min_(12,5));
const char * a = "CSDN";
const char * b = "NDSC";
//调用实例化特化 const char * min_(const char * s1, const char * s2)
printf("%s\n", min_( a, b) );
getchar();
return 0;
}
结果:
模板显式特化定义explicit specialization definition 中先是关键字template 和一对 尖括号<> 一个小于号和一个大于号然后是函数模板特化的定义该定义指出了模板名被用来特化模板的模板实参以及函数参数表和函数体
模板特化不是所有编译器都支持,本例在VC6.0、VS2010、BCB中通过,但是在GCC中不能通过编译
错误提示为:multiple definition of `char const* min_<char const*>(char const*, char const*)'