关于偏特化的问题小弟近日看到《c++templates》上的第30页:templat typenameT1,typenameT2classMyClass{..
关于偏特化的问题
小弟近日看到《c++ templates》上的第30页:
templat <typename T1,typename T2>
class MyClass{
........
};
templat <typename T1,typename T2>
class MyClass <T1*,T2*> {
........
};
MyClass <int*,float*> mp;
//书上说是使用MyClass <T1*,T2*> ,可是为什么不使用MyClass <T1,T2> 呢?
望高手解答,谢谢了
[解决办法]
没什么特别的原因,就因为MyClass <T1*,T2*> 是一个更合适的匹配。
指针配指针比一般的类型配指针更合适,这至少在表面上是很容易理解的。
至于理论上为什么这样,那查一查C++标准的规定也就知道了。语言规定就是这样的:指针配指针比一般类型配指针优先级更高。
[解决办法]
这就是偏特化的意义所在呀.
这两个模板定义都适合MyClass <int*, float*> ,编译器会选择最 "接近 "的那个.
因为其参数都是指针,MyClass <T1*, T2*> 比MyClass <T1, T2> 更接近MyClass(int*, float*). 因此就使用它了.
