等同于typedef的功能拓展,可以用于模板定义,但是有个地方值得注意
template<typename X,typename Y,typename Z>
void test(X x)
{
cout<<x;
}
可以正常运行
template<typename X,typename Y,typename Z>
using test = vector<X>;
int main(int argc,char *argv[])
{
test<int> obj;
return 0;
}
无法运行,显示test参数太少
template<typename X,typename Y,typename Z>
using test = vector<X>;
int main(int argc,char *argv[])
{
test<int,int,int> obj;
return 0;
}
可以运行
也就是说模板别名与模板类和模板函数不同,在using里相对于别名的参数与template相关,可能这就是为什么别名声明不需要带上<>而调用可以直接用<>具体化模板的原因