#include <iostream>
using namespace std;
template<typename t>
t maximum(t a, t b){
cout << "template" << endl;
return a>b?a:b;
}
template<>
const char* maximum(const char* a, const char* b){
return strlen(a) > strlen(b)? a:b;
}
//template<>
//char* maximum(char* a, char* b){
// return strlen(a) > strlen(b)? a:b;
//}//如果沒(méi)有const 的話(huà),依舊會(huì)調(diào)用最上面的模板,因?yàn)榫幾g器不能準(zhǔn)確匹配,所以必須為const才行。
int main(){
cout << maximum("pfdsfasdakis", "kadf") << endl;
}
#include <iostream>
using namespace std;
template<typename T>
class TestClass{
public:
void F(T pT){
cout << " T version " << endl;
cout << pT << endl;
}
};
template<>
class TestClass<int>{
public:
void F(int pT){
cout << "int version " << endl;
cout << pT << endl;
}
};//特化的類(lèi)在編譯器中已經(jīng)跟原來(lái)的類(lèi)名字不同了,所以是兩個(gè)東西,但是編譯器要找一個(gè)最符合的名字。TestClass_int 可以在里面修改東西
int main(){
TestClass<char> obj1;
TestClass<int> obj2;
obj1.F('A');
obj2.F(10);
obj2.g();
return 0;
}
using namespace std;
template<typename T>
class TestClass{
public:
void F(T pT){
cout << " T version " << endl;
cout << pT << endl;
}
};
template<>
class TestClass<int>{
public:
void F(int pT){
cout << "int version " << endl;
cout << pT << endl;
}
void F(char pT){
cout << "int version " << endl;
cout << pT << endl;
}如果這里修改成接受char型的參數(shù),并且在main函數(shù)中調(diào)用obj2.F('a'),同樣的,會(huì)調(diào)到該函數(shù),所以說(shuō),編譯器是在看到“TestClass<int> obj2;“這句的時(shí)候就知道該調(diào)用哪個(gè)了。
void g(){}cout << "int version " << endl;
cout << pT << endl;
}如果這里修改成接受char型的參數(shù),并且在main函數(shù)中調(diào)用obj2.F('a'),同樣的,會(huì)調(diào)到該函數(shù),所以說(shuō),編譯器是在看到“TestClass<int> obj2;“這句的時(shí)候就知道該調(diào)用哪個(gè)了。
};//特化的類(lèi)在編譯器中已經(jīng)跟原來(lái)的類(lèi)名字不同了,所以是兩個(gè)東西,但是編譯器要找一個(gè)最符合的名字。TestClass_int 可以在里面修改東西
int main(){
TestClass<char> obj1;
TestClass<int> obj2;
obj1.F('A');
obj2.F(10);
obj2.g();
return 0;
}