[C++]模版特例化和模版偏特化
函数模版特例化#
例子:
//第一个版本;可以比较任意两个类型
template<typename T> int compare(const &T,const T&);
//第二个版本处理字符串字面常量;重载实现
template<size_t N,size_t M>
int compare(const char(&)[N],const char (&)[M]);
//第三个版本;模版特例化
template<> int compare(const char*const &p1,const char*const &p2);
当定义函数模版的特例化版本时,我们本质上接管了编译器的工作。即,我们为原模版的一个特殊实例提供了定义。重要的是要弄清:一个特例化版本本质上是一个实例,而非函数名的一个重载版本。
因此,如果我们使用了下面的调用:
compare("hi","tom");
使用两个函数模版都是可行的,且提供同样好的匹配。但是,接受字符数组参数的版本更特例化,因此编译器会选择它。
类模版偏特化#
类模版部分特例化(partial specialization)
注意:我们只能部分特例化类模版,而不能部分特例化函数模版。
//原始的,最通用的版本
template<class T> struct remove_reference{
typedef T type;
};
//部分特例化版本,将用于左值引用和右值引用
template<class T> struct remove_reference<T&>//左值引用
template<class T> struct remove_reference<T&>//右值引用
由于部分特例化版本本质是一个模版,所以我们首先定义模版参数。类似任何其他特例化版本,部分特例化版本的名字和原模版名字相同,对每个未完全确定类型的模版参数,在特例化版本的模版参数列表中都有一项与之对应。在类名后,我们要为特例化的模版参数指定实参,这些实参列于模版名之后的尖括号中,这些实参与原始模版中的参数按位置对应。
作者:lizhenghao126
出处:https://www.cnblogs.com/lizhenghao126/p/11053752.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
https://github.com/li-zheng-hao
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)