c++11新特性:Alias-Template

用法

有时候模板名称很长,我们想用一个别名替代这串模板声明:
看似好像跟#define一样,就像下面这样:

1
#define Vec<T> template<typename T> std::vector<T,MyAlloc<T>>

于是上面这个#define会被替换成

1
2
3
4
//声明
Vec<T> cpll;
//转换结果
template<typaname int> std::vector<int, MyAlloc<int>> coll;

这是无法通过编译的,因为typedef是不接受参数的。
这时候我们就可以使用模板别名。如下面的形式:

1
2
3
4
template<typename T>
using Vec = std::vector<T, MyAlloc<T>>
//使用
Vec<int> coll;

我们还可以使用模板别名定义函数指针模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename T>
using myfunc = int(*)(T, T);

int Add(int a, int b){
return a + b;
}

int main()
{
// myfunc<int> 为函数指针类型,是类型名
// pFunc 为函数指针
myfunc<int> pFunc;
pFunc = Add; // 将函数地址赋值给函数指针变量
cout << pFunc(1, 2) << endl;
return 0;
}