全特化和偏特化
这两个东西是针对模版而言的,比方说你定义了一个模版类,但是想对其中的某一个特殊的类做一些优化,这时候就需要这两个东西了。 STL的vector<bool>就是这样一个东西,他重新为这个类写了一套代码。语法啥的不重要看看就行,我做了一些测试,记住优先级为 全特化>偏特化>普通模版
#include <iostream>
#include <vector>
using namespace std;
// 模版
template <class T, class S>
class node {
public:
void print() { puts("模版"); }
};
// 偏特化
template <class S>
class node<int, S> {
public:
void print() { puts("偏特化"); }
};
// 全特化
template <>
class node<int, int> {
public:
void print() { puts("全特化"); }
};
// 函数模版
template <class T, class S>
void f(T a, S b) {
puts("函数模版");
};
// 偏特化
template <class S>
void f(int a, S b) {
puts("函数偏特化");
};
// 全特化
template <>
void f(int a, int b) {
puts("函数全特化");
};
int main() {
node<double, double> n1;
node<int, double> n2;
node<int, int> n3;
n1.print();
n2.print();
n3.print();
f(1.0,1.0);
f(1,1.0);
f(1,1);
}
这个程序的输出是
模版
偏特化
全特化
函数模版
函数偏特化
函数全特化