C++ 类模版
有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类:
单个类模板语法
#include "iostream"
using namespace std;
template<typename T>
class A
{
public:
A(T t)
{
this->t = t;
}
T &getT()
{
return t;
}
protected:
public:
T t;
};
void main()
{
A<int> a(100);
// a.getT();
cout << a.t << endl;
system("pause");
return ;
}
继承中的类模板语法
类模板参数的缺省值:
类模板参数的缺省值就是在声明或定义模板的时候在模板参数后面等于一个类型
形如下面的代码:
struct NullType { }; template <typename T1, typename T2 = NullType> class Test { public : Test(T1 a1, T2 b1):a(a1), b(b1){ cout << "Template class" << endl; } private : T1 a; T2 b; }; |
作用:
1. 可以在模板偏特化时指定一个模板参数,后面的模板参数采用默认值类型,如下:
template <typename T1> class Test<T1> { public : Test(T1 a1):a(a1){ cout << "Template class number specialization(Type1)" << endl; } private : T1 a; }; |
类模板全特化(特化):
类模板全特化是类模板类型为空,在类名的尖括号里面指定好类型,如下:
template <> class Test< int , char > { public : Test( int a1, char b1):a(a1), b(b1){ cout << "Template class full specialization" << endl; } private : int a; char b; }; |
类模板部分特化(偏特化):
类模板偏特化是类名后面的尖括号中的类型一部分是指定好的,一部分需要模板参数传入,如:
template <typename T2> class Test< char , T2> { public : Test( char a1, T2 b1):a(a1), b(b1){ cout << "Template class number specialization(Type2)" << endl; } private : char a; T2 b; }; |
以上是模板参数数量的偏特化,还有其他类型的偏特化,如下:
指针类型的偏特化:
template <typename T1, typename T2> class Test<T1*, T2*> { public : Test(T1* pa1, T2* pb1):pa(pa1), pb(pb1){ cout << "Template class pointer specialization" << endl; } private : T1* pa; T2* pb; }; |
常量类型的偏特化:
template <typename T1, typename T2> class Test<T1 const , T2 const > { public : Test(T1 a1, T2 b1):a(a1), b(b1){ cout << "Template class const specialization" << endl; } private : T1 a; T2 b; }; |
使用偏特化的前提:
1. 无论是哪种特化,泛化版(模板类名后面无尖括号)要定义在每种特化版本之前
分类:
C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义