C++模板特化

11 篇文章 0 订阅
//通用模板
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*)'

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值