C++中能否不指定模板参数直接使用using定义模板类别名?
如何用
using给模板类定义可动态传参的别名 当然可以实现,不用预处理技巧——C++11及以后的标准里,模板别名声明(template using)就是干这个的。
你之前写using MyArrayT = std::array报错,是因为std::array不是一个具体类型,而是个模板。普通的using只能绑定具体类型,要绑定模板的话,得用带template的别名声明。
修正后的代码如下:
#include <array> // 普通别名:绑定到具体的std::array<int,5>类型 using MyArray = std::array<int, 5>; // 模板别名:把MyArrayT定义成std::array的模板别名,保留参数位 template <typename T, size_t N> using MyArrayT = std::array<T, N>; int main() { MyArray myArray1; // 正常使用 MyArrayT<char, 10> myArray2; // 像用std::array一样传参数 }
要点说明
- 模板别名必须用
template开头,后跟和原模板一致的参数列表(这里std::array需要类型T和大小N两个参数) - 这样定义的
MyArrayT就是std::array的“别名模板”,使用规则和原模板完全一致 - 注意要开启C++11或更高版本的编译标准(比如GCC加
-std=c++11,MSVC默认支持)
内容的提问来源于stack exchange,提问作者Pietro
相关产品推荐
相关产品推荐

