#include<iostream>
using namespace std;
//基本模板
template<typename T>
class A{
public:
void f1(){
cout << "A::f1()" << endl;
}
void f2(){
cout << "A::f2()" << endl;
}
};
//先全局特化一个void*,防止a处的代码无限递归
template<>
class A<void*>{
public:
void f1(){
cout << "A::f1()" << endl;
};
void f2(){
cout << "A::f2()" << endl;
};
};
//局部特化
template<typename T>
class A<T*>{
private:
A<void*> impl;//a
public:
void f1(){
impl.f1();
}
void f2(){
cout << "A<T*>::f2()"<<endl;
}
};
int main()
{
A<int*> a;
a.f1();
a.f2();
}
A::f1()
A<T*>::f2()
函数模板只能被重载,重载的函数模板是一个分开的模板,它们之间是完全独立的。
#include<iostream>
using namespace std;
template<typename T>
T const& myMin(T const& t1,T const& t2){
return t1>t2?t1:t2;
}
template<typename T>
T* const& myMin(T* const& t1,T* const& t2){
return *t1>*t2?t1:t2;
}
int main(){
int a=1,b=2;
cout << *myMin(&a,&b);//call T* const& myMin
}
2