随笔 - 55  文章 - 15  trackbacks - 0
<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜



#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 阅读(320) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理