类模板局部特化

类模板可以被局部特化,现举例如下:

template <typename T1,typename T2>
class MyClass{
...
}
就可以有下面几种局部特化:
//局部特化:两个模板参数具有相同的类型
template <typename T>
class MyClass<T,T>{
……
}

//局部特化:第二个模板参数的类型是int
template <typename T>
class MyClass<T,int>{
...
}

//局部特化:两个模板参数都是指针类型
template<typename T1,typename T2>
class MyClass<T1*,T2*>{
...
}

下面的例子展示各种声明会使用哪个模板:

MyClass<int,float> mif;//使用Myclass<T1,T2>
MyClass<float,float> mff;//使用MyClass<T,T>
MyClass<folat,int> mfi;//使用MyClass<T,int>
MyClass<int*,float*> mp;//使用MyClass<T1*,T2*>

如果有多个局部特化同等程度的匹配某个声明,那么就称该声明具有二义性:

MyClass<int,int> m;//错误:同等陈德匹配MyClass<T,T>和MyClass<T,int>
MyClass<int*,int*> m;//错误:同等程度的匹配MyClass<T,T>和MyClass<T1*,T2*>
posted @ 2009-11-13 11:00  巩固  阅读(231)  评论(0编辑  收藏  举报