实例代码:
#include <iostream>
#include <vector>
using namespace std;
template<typename T, typename U>
struct TC{
TC(){
cout << "泛化版本构造函数" << endl;
}
void functest(){
cout << "泛化版本" << endl;
}
};
template<>
struct TC<int, int>
{
TC(){
cout << "int , int 特化版本构造函数" << endl;
}
void functest(){
cout << "int, int 的特化版本" << endl;
}
};
template<>
struct TC<double, int>
{
void functest(){
cout << "double, int 的特化版本" << endl;
}
};
template<>
void TC<double, double>::functest()
{
cout << "double, double 的functest()特化版本" << endl;
};
template <typename T, typename U, typename W>
struct TC1
{
void functest(){
cout << "泛化版本" << endl;
}
};
template<typename U>
struct TC1<int, U, double>
{
void functest(){
cout << "偏特化 int, U, double 版本" << endl;
}
};
template<typename T>
struct TC2{
void functest(){
cout << "泛化版本" << endl;
}
};
template<typename T>
struct TC2<const T>{
void functest(){
cout << "const T特化版本" << endl;
}
};
template<typename T>
struct TC2<T*>{
void functest(){
cout << "T*特化版本" << endl;
}
};
template<typename T>
struct TC2<T&>{
void functest(){
cout << "T&左值引用特化版本" << endl;
}
};
template<typename T>
struct TC2<T&&>{
void functest(){
cout << "T&&右值引用特化版本" << endl;
}
};
template <typename T, typename U>
void tfunc(T &tmprv, U& tmprv2)
{
cout << "tfunc泛化版本" << endl;
cout << tmprv << endl;
cout << tmprv2 << endl;
}
template <>
void tfunc(int &tmprv, double& tmprv2)
{
cout << "-------begin--------" << endl;
cout << "tfunc特化int,double" << endl;
cout << tmprv << endl;
cout << tmprv2 << endl;
cout << "----------end---------" << endl;
}
void tfunc(int &tmprv, double& tmprv2)
{
cout << "tfunc重载函数(int, double)" << endl;
}
int main()
{
TC<char, int> tchar;
tchar.functest();
TC<int, int> tcint;
tcint.functest();
TC<double, int> tdint;
tdint.functest();
TC<double, double> tdbldbl;
tdbldbl.functest();
TC1<double, int, double> tcdi;
tcdi.functest();
TC1<int, int, double> teii;
teii.functest();
TC2<double> td;
td.functest();
TC2<double*> tpd;
tpd.functest();
TC2<const double*> tpd2;
tpd2.functest();
TC2<const double> td3;
td3.functest();
TC2<int&> tcyi;
tcyi.functest();
TC2<int&&> tcyii;
tcyii.functest();
const char *p = "I Love China!";
int i = 12;
tfunc(p, i);
double db = 15.8f;
tfunc(i, db);
system("pause");
}