模板特化

什么是特化?什么是偏特化?
偏特化有两种,第一种是个数上的偏.第二种是范围上的偏.

对于个数上的偏,如,模板共有2个模板参数,但是只指定1个模板参数,那么这就是偏特化.
范围上的偏,如第一个模板参数,表示指向任意类型,当我们想要表示指向任意类型的指针,那么这就是范围上的偏.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template<typename T>
class C {
public:
C() {
cout << "generic version" << endl;
}
};

template<typename T>
class C<T *> {
public:
C() {
cout << "pointer version" << endl;
}
};

void test_parial_specialization() {
C<string> obj1; // 使用泛华版本
C<string *> obj2; // 使用指向任意类型的指针类型
}

运行结果:

1
2
generic version
pointer version

函数模板没有特化,只能重载.