C++11中的模板特例化

本文介绍了C++11中模板特例化的概念和应用,包括函数模板特例化和类模板特例化。通过示例,阐述了如何进行完全特例化、部分特例化以及如何禁用特定模板参数的特例化。模板特例化用于在特定类型下定制或禁用函数模板和类模板的行为,提供更精确的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

函数模板特例化

类模板特例化


  最近在看智能指针的源码,发现其中用了很多模板特例化,本文就来总结一下,什么是模板特例化。

      特例化,顾名思义:特殊实例化,将函数模板或类模板实例化为特殊的类型,通过模板特例化可以定制在特定模板参数下的函数模板/类模板实现,或者禁用特定模板的函数模板/类模板

函数模板特例化

       既然是特例化,那么自然就需要有一个“原型”,现在假设一个原型模板函数compare,用来比较传入的两个参数的大小,如下所示:

template<typename T>
bool compare(T param1,T param2)
{
	return param1 < param2;
}

      通过这个模板函数,可以传入任意类型的两个参数,如compare(1,2); compare(1.1,2.1);

      那要是compare("hello","hey");呢?传入的两个参数类型为const char *类型的指针,这种情况如果还只是比较两个指针的大小,显然是不行的,应当使用strcmp来比较。所以,当模板参数类型为const char *类型时,这就需要进行“特例化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值