今天想针对不同指针类型写一系列处理函数,同函数重载,写了一大堆同名的函数重载,看类声明感觉极其丑陋。于是考虑模板及特化,测试了两段代码。
废话少说,贴代码。
例1:类模板的成员函数的特化
此处特化的是类
template <class T>
class Sample
{
public:
void print() {printf("\nprint template");}
};
void Sample<int>::print() {printf("\nprint int");};
// 调用
int _tmain(int argc, _TCHAR* argv[])
{
Sample a;
a.print();
Sample b;
b.print();
return 0;
}
// 输出
/*
print int
print template
*/
例2:类的成员模板函数的特化
此处,仅特化函数
class Sample2
{
public:
template <class T>
void print()
{printf("\nSample2 print template");}
};
template <>
void Sample2::print<int>()
{printf("\nSample2 print int");}
// 调用
int _tmain(int argc, _TCHAR* argv[])
{
Sample2 sam2;
sam2.print<double>();
sam2.print<int>();
return 0;
}
// 输出
/*
Sample2 print template
Sample2 print int
*/