1、实例化
实例化很好理解,因为模板在编写的过程中没有传入具体的数据类型,而传入类型并创建实例的过程称之为实例化。
tempalte<typename T>
class DataAdd()
{
public:
T Add(T a,T b)
{
return a+b;
}
};
//实例化
DataAdd<int> *dataAdd = new DataAdd<int>();
std::cout<<"1+2="<<dataAdd->Add(1,2)<<std::endl;
2、特化
上面的例子展示了一个数据相加相加模板类,但是如果我现在有个特殊需求,就是我的string相加啊,我要让顺序颠倒,比如“123”+“456”本来应该输出“123456”,但是现在我需要让它输出“456123”;
tempalte<typename T>
class DataAdd()
{
public:
string Add(string a,string b)
{
return b+a;
}
T Add(T a,T b)
{
return a+b;
}
};
一个模板被称为全特化的条件:1.必须有一个主模板类 2.模板类型被全部明确化
tempalte<>
class DataAdd()
{
public:
string Add(string a,string b)
{
return b+a;
}
int Add(int a,int b)
{
return a+b;
}
};
3、偏特化
还是同样的代码
tempalte<typename T>
class DataAdd()
{
public:
T Add(T a,int b)
{
return a+b;
}
};
和泛化还有特化不太一样的是,这个只有部分参数是指定类型的