C++高级---模板特化

template<typename T>
class A
{
public:
	T add(T a,T b){return a+b;}
	T Mul(T a,T b){return a*b;}
};

template<>
class A<int>
{
public:
	int add(int a,int b){return a*b;}
};
typedef A<int> B;


template<typename T>
T Compare(T a,T b){return a-b;};

template<>
int Compare<int>(int a,int b){return a-b;};            //特化版本;

int Compare(const char*a,const char*b){return strcmp(a,b);}; //重载版本;

template<>
const char* Compare<const char*>(const char*a,const char*b){return NULL;}; //特化版本;



int main()
{
	B temp;
	int nRet = temp.add(5,6);
	//nRet     = temp.Mul(5,6); //编译失败,把class A<int> 定义删除后,编译通过;

	Compare<int>(4,5);          //特化版本存在时进入特化版本中,否则进入常规模板中;
	const char*a = NULL;
	const char*b = NULL;

	Compare(1.2,4.5);           //常规模板实例中;

	Compare(a,b);               //重载版本中,当重载版本不存在时调用特化版本,特化版本不存在时调用常规模板实例;
	Compare<const char*>(a,b);  //特化版本中;
	return 0;
}

内容比较复杂,多多调试看看

具体介绍可查看C++ Primer模板特化的相关章节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值