模板特化和偏模板特化例子(template specialization and partial template specialization)

来源:互联网 发布:网络端口是啥 编辑:程序博客网 时间:2024/06/06 02:59

测试环境:

win7 64

g++ 4.8.1

/*********************************************************************************  Copyright (C), 1988-1999, drvivermonkey. Co., Ltd.  File name:   Author: Driver Monkey  Version:   Mail:bookworepeng@hotmail.com  Date: 2014.04.02  Description:   *********************************************************************************/ #include<stdlib.h>#include <iostream>#include <typeinfo>#include <typeindex> #include <map>using namespace std;class A{    public:    A(){cout<<"A created!"<<endl;}};struct SUB_A:public A{    public:    SUB_A(){cout<<"SUB_A created!"<<endl;}};template<class T1, class T2> class CompileTimeChecker {     public:    T1 t1;    T1 t2;    CompileTimeChecker()    {        cout<<"1---CompileTimeChecker = "<<typeid(t1).name()<<endl;         cout<<"1---CompileTimeChecker = "<<typeid(t2).name()<<endl;     }}; template <class T> class CompileTimeChecker<T,float>{    public:        T t;        CompileTimeChecker()        {            cout<<"2---CompileTimeChecker = "<<typeid(t).name()<<endl;        }};template<> class CompileTimeChecker<A, SUB_A>{     public:     A a;     SUB_A sub_a;    CompileTimeChecker()    {        cout<<"3---CompileTimeChecker = "<<typeid(a).name()<<endl;     }   }; int main(void){    CompileTimeChecker<int, float> int_instance;    CompileTimeChecker<int, int> a_instance;    CompileTimeChecker<A,SUB_A> sub_instance;}

输出结果:



0 0