c++ 模板类特化

#include<iostream>

//1. 标准模板类。
    template<typename T1, typename T2>
    class MyClass {
    	public: 
        MyClass(){
			std::cout<<" type 1. \n";		
		}
    };
    //2. 两个模板参数具有相同类型的部分特化类。
    template<typename T>
    class MyClass<T,T> {
        public:
		MyClass(){
			std::cout<<" type 2. \n";		
		}
    };
    //3. 第二个类型参数是int
    template<typename T>
    class MyClass<T,int> {
        public:
		MyClass(){
			std::cout<<" type 3. \n";		
		}
    };
    //4. 两个模板参数都是指针。
    template<typename T1,typename T2>
    class MyClass<T1*,T2*> {
        public:
		MyClass(){
			std::cout<<" type 4. \n";		
		}
    };
    //5. 两个模板参数都是相同类型的指针。
    template<typename T>
    class MyClass<T*,T*> {
        public:
		MyClass(){
			std::cout<<" type 5. \n";		
		}
    };
    //6. 调用示例代码。
    int main() {
        MyClass<int,float> c1;         //调用MyClass<T1,T2>
        MyClass<float,float> c2;    //调用MyClass<T,T>
        MyClass<float,int> c3;      //调用MyClass<T,int>
        MyClass<int*,float*> c4;    //调用MyClass<T1*,T2*> 
        MyClass<int*,int*> c5;      //调用MyClass<T*,T*>
        
        MyClass<int,int> c6;	// 调用MyClass<T,T> or 调用MyClass<T,int> , 报错:[Error] ambiguous class template instantiation for 'class MyClass<int, int>'
        return 0;
    }

猜你喜欢

转载自javaeye-hanlingbo.iteye.com/blog/2407800