Partially specialize (偏特化)
对于C++ 而言,
假设我们现在希望定制出一个对应类的特化 Swap 函数
class Sp{
public :
void swap(Sp & other){
using namespace std;
swap(pImpl, other.pImpl); 这里假设我们已经定义一个指针, 希望交换该指针.
}
}
template<>
void swap<Sp>(Sp &a, Sp &b){
a.swap(b);
}
以上是合理的, 但是如果,我们交换的不是class, 而是 template class .
想当然的我们会这么做
template<typename T>
void swap<Sp<T>>(Sp<T> &a, Sp <T>&b){
a.swap(b); ///不合法
}
这就是偏特化, 也就是我们对某一个类型进行特化.
但是这不合法,
C++ 只允许对class template 偏特化,而对function template 是不合法的.
这里我们可以直接用一个重载版本实现
template<typename T>
void swap(Sp<T> &a, Sp <T>&b){
a.swap(b);
}