You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:22:10