#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;
//}//如果没有const 的话,依旧会调用最上面的模板,因为编译器不能准确匹配,所以必须为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;
}
void F(char pT){
cout << "int version " << endl;
cout << pT << endl;
}如果这里修改成接受char型的参数,并且在main函数中调用obj2.F('a'),同样的,会调到该函数,所以说,编译器是在看到“TestClass<int> obj2;“这句的时候就知道该调用哪个了。
void g(){}
};
//特化的类在编译器中已经跟原来的类名字不同了,所以是两个东西,但是编译器要找一个最符合的名字。TestClass_int 可以在里面修改东西
int main(){
TestClass<
char> obj1;
TestClass<
int> obj2;
obj1.F('A');
obj2.F(10);
obj2.g();
return 0;
}
posted on 2012-06-04 19:57
Dino-Tech 阅读(321)
评论(0) 编辑 收藏 引用